第1题
function A(){
alert(1)
}
function Fn(){
A = function(){
alert(2)
}
return this
}
Fn.A = A
Fn.prototype = {
A: () => {
alert(3)
}
}
A()
Fn.A()
Fn().A()
new Fn.A()
new Fn().A()
new new Fn().A()
结果:
1
1
2
1
3
报错
第2题
var x = 2
var y = {
x: 3,
z: (function(x){
this.x = x
x += 3
console.log(x)
})(x)
}
var m = y.z
m(4)
y.z(5)
console.log(x,y.x)
结果:
5
报错
第3题
var x = 0,
y = 1
function fn(){
x += 2
fn = function(y){
console.log(y + (--x))
}
console.log(x,y)
}
fn(3)
fn(4)
console.log(x,y)
结果:
2 1
5
1 1
第4题
setTimeout(() => {
console.log(1)
},20)
console.log(2)
setTimeout(() => {
console.log(3)
},10)
console.log(4)
console.log('AA')
for(let i = 0;i < 9000000;i++){
// do soming
}
console.timeEnd('AA')
console.log(5)
setTimeout(() => {
console.log(6)
},8)
console.log(7)
setTimeout(()=>{
console.log(6)
},8)
console.log(7)
setTimeout(()=>{
console.log(8)
},15)
console.log(9)
结果:
2
4
AA
Timer 'AA' does not exist
5
7
7
9
undefined
3
1
6
6
8
第5题
// a等于什么值条件会成立?
var a = ?
if(a ==1 && a ==2 && a ==3){
console.log('条件成立')
}
结果:
方案1:
a = {
i: 0,
toString(){// valueOf也行
return ++this.i
}
}
方案2:
var i = 0
Object.defineProperty(window,'a',{
get(){
return ++i
}
})
方案3:
var a = [1,2,3]
a.toString = a.shift
解析:
- 对象==字符串 就是对象.toString()变为字符串
- null==undefined 相等 但是和其他值比较就不相等
- NaN==NaN 不相等
- 剩下的都是转换为数字 例如:'1' == true 就是 1 == 1
网友评论