易错题积累

前面的话

最近在做题,小柒将自己做的易错题积累起来,并且一直更新。

推荐:从8个问题考查你是否真的懂js

(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,后面的都不用看)。
易错题积累易错题积累 crazy的蓝色梦想 发布了238 篇原创文章 · 获赞 173 · 访问量 4万+ 私信 关注
上一篇:两个数组比较(增加和删除)


下一篇:数组的方法