1. 程式人生 > >牛客網Javascript專項練習錯題彙總

牛客網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