web前端经典问题探讨(Damon执笔)
------------------------------------------------------------------------------------
Q:代码执行 [1,2,3].map(parseInt) 的结果?
A:
map循环第1次
parseInt(1,0)
分析:1、基数是0(基数的范围 [2,36],基数不在合法范围内的,一律返回NaN),0比较特殊也表示10进制
2、按照进制范围依次截取字符串,得到1
3、1*10^0 => 1
map循环第2次
parseInt(2,1)
分析:1、基数是1(基数的范围 [2,36],基数不在合法范围内的,一律返回NaN)
2、基数合法,故返回NaN
map循环第3次
parseInt(3,2)
分析:1、基数是0(基数的范围 [2,36],基数不在合法范围内的,一律返回NaN),0比较特殊也表示10进制
2、按照进制范围依次截取字符串,得到"",故返回NaN
Q:const a={name:1}
a.x=a={}
console.log(a.x) //?
A:
Q:
var a = {n: 1}
var b = a;
a.x = a = {n: 2}
console.log(a.x);
console.log(b.x)
A:
Q:(a ==1 && a== 2 && a==3) 可能为 true 吗?
A:
解决方法1:
let a={
val:0,
valueOf(){
return ++this.val
}
}
if(a ==1 && a== 2 && a==3){
console.log("success")
}
解决方法2:
let a={
[Symbol.toPrimitive]:((i)=>()=>++i)(0)
}
if(a ==1 && a== 2 && a==3){
console.log("success")
}
解决方法3:
let val=0
Object.defineProperty(window,'a',{
get(){
return ++val
}
})
if(a ==1 && a== 2 && a==3){
console.log("success")
}
解决方法4:
let val=0
with({
get a(){
return ++val
}
}){
if(a ==1 && a== 2 && a==3){
console.log("success")
}
}
var foo={n:1};
(function (foo) {
console.log(foo.n);
foo.n = 3;
var foo = {n:2};
console.log(foo.n);
})(foo);
console.log(foo.n);
/*
* 多条件for循环执行时,
* 只要有一个不满足条件
* 则全部退出循环
*
*
* */
var i, j, k;
for (i=0, j=0; i<4, j<2; i++, j++) {
console.log(i, j);
k = i+j;
}
console.log(k);
(() => {
let m, n;
try {
throw new Error();
} catch (m) {
(m = 10), (n = 20);
console.log(m);
}
console.log(m);
console.log(n);
})();
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。