前面的话
最近在做题,小柒将自己做的易错题积累起来,并且一直更新。
(1) 下面代码运行结果
var arr1 = "john".split(''); // j o h n
var arr2 = arr1.reverse(); // n h o j
var arr3 = "jones".split(''); // j o n e s
arr2.push(arr3);
console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));// 5 n
console.log("array 2: length=" + arr2.length + " last=" + arr2.slice(-1));// 5 s
解析:
本题考查js数组的方法。
console.log(arr1);// [n, h, o, j, [j, o, n, e, s]]
console.log(arr2);// [n, h, o, j, [j, o, n, e, s]]
console.log(arr3);// [j, o, n, e, s]
- 这题错在忽略了
reverse
这个方法,它 不仅改变原数组,并且返回原数组的引用。也就是说第4行arr2.push(arr3)
会影响arr1
. - 要注意
slice
这个方法,他会截取数组的片段,如果参数是负数,则从尾部开始计算。
结果为:
array 1: length=5 last=j,o,n,e,s
array 2: length=5 last=j,o,n,e,s
(2) 下面代码的输出结果
console.log(1 + "2" + "2"); // 122
console.log(1 + +"2" + "2");// 32
console.log(1 + -"1" + "2");// 02
console.log(+"1" + "1" + "2");// 112
console.log( "A" - "B" + "2");// NaN2
console.log( "A" - "B" + 2);// NaN
解析:
本题考查操作符。
-
多个数字和数字字符串混合运算时,跟操作数的位置有关
console.log(2 + 1 + '3'); // '33' console.log('3' + 2 + 1); //'321'
-
数字字符串之前存在数字中的正负号(+/-)时,会被转换成数字
console.log(typeof '3'); // string console.log(typeof +'3'); //number
同样,可以在数字前添加 ”,将数字转为字符串
console.log(typeof 3); // number console.log(typeof (''+3)); //string
-
对于运算结果不能转换成数字的,将返回 NaN
console.log('a' * 'sd'); //NaN console.log('A' - 'B'); // NaN
(3) 下面代码的输出结果
console.log("0 || 1 = "+(0 || 1)); // 1
console.log("1 || 2 = "+(1 || 2));// 1
console.log("0 && 1 = "+(0 && 1));// 0
console.log("1 && 2 = "+(1 && 2));// 2
解析:
本题考查逻辑与
和逻辑或
。
- 对于
||
,返回第一个为true
的数(如果第一个为true,不用看后面的,直接返回第一个数),或者返回最后一个为false
的数 - 对于
&&
,返回最后一个为true
的数(前面都为true),或者返回第一个为false
的数(如果第一个数为false,后面的都不用看)。