牛客网Javascript专项练习错题汇总

字符串的拼接

console.log(1+ +"2"+"2");
console.log("A"- "B"+"2");
console.log("A"- "B"+2);
console.log(1+ +”2”+”2”)中的第一个加号表示的是一元加操作符,+”2”变成了正整数2,从而前面进行1+2+“2“,因此结果为32
console.log(“A”-“B”+”2”)中的减号两边的操作数需要先变成number类型的值,而A和B转换成number类型的值结果为NAN;因此”A”-“B”的值为NAN;然后将它与字符串”2”进行合并,从而变成了NAN
console.log(“A”-“B”+2)中前面的同上,也变成了NAN,而与2进行整数类型相加,因为NAN与数值进行任何操作都为NAN,因此结果仍然为NAN

js定义的结果

<script>
    function test(){
           
    
        var a=b=1;
    }();
    console.log(a);
    console.log(b);
</script>
最终控制台打印的结果为:referenceerror 5
其中var a=b=1的含义为:首先在函数内部定义一个局部变量a,而在函数内部和全局范围中并没有变量b的定义,因此它会声明为全局变量来定义,而此时已经进行了a和b的赋值,因此输出a的时候就会报错:a is not defined;而b这时候成为了一个全局变量,他的值为5
这段代码可以写成:
<script>
    var b;
    function test(){
           
    
        var a=b;
        b=1;
    }();
    console.log(a);
    console.log(b);
</script>

如何准确判断一个对象是否为Array对象?

判断一个对象的类型,常用两种方法,typeof和instanceof,而typof对于引用类型数据都是会返回object;instanceof可以准确判断一个对象是否是给定的类型,如 obj instanceof Array,可是这在跨frame对象构建的场景下会失效
可以通过prototype原型进行判断
Object.prototype.toString.call(arr) === [object Array];
具体参考文档:http://www.nowamagic.net/librarys/veda/detail/1250

经验分享 程序员 微信小程序 职场和发展