Skip to main content

Output 输出类

随机全部
顺序全部
随机置顶
随机 ⭐
顺序 ⭐
5道(0)
重置
0

类型转换类​

'true' == true 
'false' == false
null == ''
['x'] == 'x'
[1, 2, 3] == [1, 2, 3]
true + false
[1] > null
"foo" + + "bar"
0 || "0" && {}
{} + [] + {} + [1]
! + [] + [] + ![]
new Date(0) - 0
new Date(0) + 0
'ca' < 'bd'
Boolean(new Boolean(false))

this 类​

var a = 10
var obj = {
a: 20,
say: () => {
console.log(this.a)
}
}
obj.say()

var anotherObj = {
a: 30
}
obj.say.apply(anotherObj)
var obj = {
say: function () {
var f1 = () => {
console.log("1111", this);
}
f1();
},
pro: {
getPro: () => {
console.log(this);
}
}
}
var o = obj.say;

o();
obj.say();
obj.pro.getPro();
var myObject = {
foo: "bar",
func: function () {
var self = this;
console.log(this.foo);
console.log(self.foo);
(function () {
console.log(this.foo);
console.log(self.foo);
}());
}
};
myObject.func();
var a = 1;
function printA() {
console.log(this.a);
}
var obj = {
a: 2,
foo: printA,
bar: function () {
printA();
}
}

obj.foo();
obj.bar();

var foo = obj.foo;
foo();
var x = 3;
var y = 4;
var obj = {
x: 1,
y: 6,
getX: function () {
var x = 5;
return function () {
return this.x;
}();
},
getY: function () {
var y = 7;
return this.y;
}
}
console.log(obj.getX())
console.log(obj.getY())

作用域类​

(function(){
var x = y = 1;
})();
var z;

console.log(y);
console.log(z);
console.log(x);
// a
function Foo() {
getName = function () {
console.log(1);
}
return this;
}
// b
Foo.getName = function () {
console.log(2);
}
// c
Foo.prototype.getName = function () {
console.log(3);
}
// d
var getName = function () {
console.log(4);
}
// e
function getName() {
console.log(5);
}

Foo.getName();
getName();
Foo().getName();
getName();
new Foo.getName();
new Foo().getName();
new new Foo().getName();

setTimeout 类 + 怎么解决​

for (var i = 0; i < 5; i++) {
setTimeout(() => {
console.log(i)
}, i * 1000)
}

Promise 类​

const promise = new Promise((resolve, reject) => {
console.log(1);
console.log(2);
});
promise.then(() => {
console.log(3);
});
console.log(4);
const promise = new Promise((resolve, reject) => {
console.log(1);
setTimeout(() => {
console.log("timerStart");
resolve("success");
console.log("timerEnd");
}, 0);
console.log(2);
});
promise.then((res) => {
console.log(res);
});
console.log(4);
Promise.resolve().then(() => {
console.log('promise1');
const timer2 = setTimeout(() => {
console.log('timer2')
}, 0)
});
const timer1 = setTimeout(() => {
console.log('timer1')
Promise.resolve().then(() => {
console.log('promise2')
})
}, 0)
console.log('start');
const promise = new Promise((resolve, reject) => {
resolve('success1');
reject('error');
resolve('success2');
});
promise.then((res) => {
console.log('then:', res);
}).catch((err) => {
console.log('catch:', err);
})
Promise.resolve('1')
.then(res => {
console.log(res)
})
.finally(() => {
console.log('finally1')
})
Promise.resolve('2')
.finally(() => {
console.log('finally2')
return '我是finally2返回的值'
})
.then(res => {
console.log(res)
})
console.log(1)

setTimeout(() => {
console.log(2)
})

new Promise(resolve => {
console.log(3)
resolve(4)
}).then(d => console.log(d))

setTimeout(() => {
console.log(5)
new Promise(resolve => {
resolve(6)
}).then(d => console.log(d))
})

setTimeout(() => {
console.log(7)
})

console.log(8)
Promise.resolve().then(() => {
console.log('1');
throw 'Error';
}).then(() => {
console.log('2');
}).catch(() => {
console.log('3');
throw 'Error';
}).then(() => {
console.log('4');
}).catch(() => {
console.log('5');
}).then(() => {
console.log('6');
});
setTimeout(function () {
console.log(1);
}, 100);

new Promise(function (resolve) {
console.log(2);
resolve();
console.log(3);
}).then(function () {
console.log(4);
new Promise((resove, reject) => {
console.log(5);
setTimeout(() => {
console.log(6);
}, 10);
})
});
console.log(7);
console.log(8);

Async / Await 类​

async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}
async function async2() {
console.log("async2");
}
async1();
console.log('start')
async function async1() {
console.log('async1 start');
await new Promise(resolve => {
console.log('promise1')
})
console.log('async1 success');
return 'async1 end'
}
console.log('srcipt start')
async1().then(res => console.log(res))
console.log('srcipt end')
async function async1() {
console.log('async1 start');
await new Promise(resolve => {
console.log('promise1')
resolve('promise1 resolve')
}).then(res => console.log(res))
console.log('async1 success');
return 'async1 end'
}
console.log('srcipt start')
async1().then(res => console.log(res))
console.log('srcipt end')
async function async1() {
console.log("async1 start");
await async2();
console.log("async1 end");
}

async function async2() {
console.log("async2");
}

console.log("script start");

setTimeout(function () {
console.log("setTimeout");
}, 0);

async1();

new Promise(resolve => {
console.log("promise1");
resolve();
}).then(function () {
console.log("promise2");
});
console.log('script end')

process.nextTick 类​

console.log('1');

setTimeout(function () {
console.log('2');
process.nextTick(function () {
console.log('3');
})
new Promise(function (resolve) {
console.log('4');
resolve();
}).then(function () {
console.log('5')
})
})
process.nextTick(function () {
console.log('6');
})
new Promise(function (resolve) {
console.log('7');
resolve();
}).then(function () {
console.log('8')
})

setTimeout(function () {
console.log('9');
process.nextTick(function () {
console.log('10');
})
new Promise(function (resolve) {
console.log('11');
resolve();
}).then(function () {
console.log('12')
})
})

queueMicrotask 类​

Promise.resolve().then(() => console.log('promise1'));
queueMicrotask(() => console.log('microtask1'));
console.log('sync');
queueMicrotask(() => console.log('microtask2'));
Promise.resolve().then(() => console.log('promise2'));

微任务递归类(饿死宏任务)​

setTimeout(() => console.log('timeout'), 0);

(function loop() {
queueMicrotask(() => {
console.log('tick');
loop(); // 无限递归产生新微任务
});
})();

requestAnimationFrame 类​

requestAnimationFrame(() => console.log('raf'));
Promise.resolve().then(() => console.log('promise'));
console.log('sync');

MessageChannel 类​

const { port1, port2 } = new MessageChannel();
port1.onmessage = () => console.log('message');
port2.postMessage('hi');
Promise.resolve().then(() => console.log('promise'));
console.log('sync');

MutationObserver 类​

const target = document.getElementById('box');
const observer = new MutationObserver(() => console.log('mutation'));
observer.observe(target, { attributes: true });

Promise.resolve().then(() => console.log('promise1'));
target.setAttribute('data-x', '1');
Promise.resolve().then(() => console.log('promise2'));

Generator / yield 类​

function* gen() {
console.log('start');
const a = yield 1;
console.log('a =', a);
const b = yield 2;
console.log('b =', b);
return 3;
}
const it = gen();
console.log(it.next());
console.log(it.next('x'));
console.log(it.next('y'));
console.log(it.next());
async function* nums() {
yield 1;
yield 2;
yield 3;
}
(async () => {
for await (const n of nums()) console.log('n =', n);
})();

class / super / static 类​

class Parent {
static who() { return 'Parent'; }
hello() { return `hello ${this.name}`; }
}
class Child extends Parent {
constructor() { super(); this.name = 'child'; }
static who() { return 'Child'; }
hello() { return super.hello() + '!'; }
}
console.log(Child.who());
console.log(new Parent().hello());
console.log(new Child().hello());
console.log(Object.getPrototypeOf(Child) === Parent);
class Counter {
static instances = 0;
static { console.log('static block'); }
#count = 0;
inc() { this.#count++; return this.#count; }
get count() { return this.#count; }
}
const c1 = new Counter();
const c2 = new Counter();
Counter.instances += 2;
c1.inc();
c1.inc();
console.log('count:', c1.count, 'instances:', Counter.instances);

Promise 新 API 类​

const { promise, resolve } = Promise.withResolvers();
setTimeout(() => resolve('resolved'), 0);
promise.then((v) => console.log(v));

Promise.allSettled([Promise.resolve(1), Promise.reject('err')])
.then((r) => console.log(r.map((x) => x.status).join(',')));

Promise.any([Promise.reject('a'), Promise.resolve('b')])
.then((v) => console.log('any:', v));

console.log('sync');

Symbol.toPrimitive 类​

const obj = {
[Symbol.toPrimitive](hint) {
console.log('hint:', hint);
return hint === 'string' ? '42' : 42;
},
valueOf() { console.log('valueOf'); return 100; },
toString() { console.log('toString'); return '200'; },
};
console.log(obj + 1);
console.log(`${obj}`);
console.log(String(obj));
console.log(+obj);
const o2 = { valueOf() { return 3; }, toString() { return '4'; } };
console.log(o2 + 1);
console.log(`${o2}`);

暂时性死区类​

var hoisted = 'ok';
try {
console.log(typeof tdzVar);
} catch (e) {
console.log('TDZ:', e.constructor.name);
}
let tdzVar = 2;
console.log(typeof hoisted, typeof tdzVar);
var a = 'outer';
{
try {
console.log(a);
} catch (e) {
console.log('block TDZ:', e.constructor.name);
}
let a = 'inner';
}