JavaScript中有9種經常使用的一元運算符,本文作簡單羅列和說明。javascript
將操做數轉換爲數字
function與object大部分狀況都會被轉換爲NaN
除非對象擁有一個名爲valueOf函數值且其函數有返回值java
+{ valueOf: function(){ return '0xFF' } } //returns 255
也是將操做數轉數字,同時變爲負數node
在取反前,會進行隱式類型轉換git
將操做數遞增或遞減,注意位置放到前面和後面會有區別,如同C語言中同樣github
對任一數值x進行按位非運算操做的結果爲-(x+1)chrome
操做數放到typeof的後面,會返回當前操做數的類型,對於數值類型能夠準確返回,對於引用類型,Function會返回'function',其餘都只會返回'object'數組
刪除數組或對象中特定索引的值
刪除成功時會返回true,刪除失敗時返回false瀏覽器
// 刪除變量 var hi = 1; delete hi; // returns false console.log(hi); // returns 1 // 刪除函數 function yo(){ }; delete yo; // returns false console.log(yo); // returns function foo(){ } // 刪除對象 var pub = {bar: '1'} delete pub // returns false console.log(pub); // returns {bar: '1'} //刪除數組 var code = [1,1,2,3,5] delete code // returns false console.log(code); // [1,1,2,3,5]
對於數組的索引刪除:函數
// 刪除數組中的某個值 var lol=[20,30,40]; console.log(lol.length); // returns 3 delete lol[2] // returns true console.log(lol); // returns [ 20, 30, ] console.log(lol[2]); // returns undefined console.log(lol.length); // returns 3
丟棄表達式的返回值,而返回undefined
使用方式有void 表達式,void (表達式) 兩種code
在加法的過程當中,首先把等號左右兩邊進行了求原值ToPrimitive()操做,而後若是兩個原值只要有一個是String類型,就把兩個原值都進行轉化字符串ToString()操做,進行字符串拼接;不然把兩個原值都進行轉化數字ToNumber()操做,進行數字相加。
ToPrimitive(input [, PreferredType])
將input轉換爲原始值,PreferredType爲可選參數,只接受Number或String,用來設置轉換偏好
通常狀況下,對Date求原值,則PreferredType是String,其餘Object對象均爲Number
[] + [] // ""
進行ToPrimitive,兩個都是Array對象,不是Date對象,因此以Number爲轉換標準,因此先調用valueOf(),結果仍是[ ],不是原始值,因此繼續調用toString(),結果是「」原始值,將「」回。第二個[ ]過程是相同的,返回「」。加號兩邊結果都是String類型,因此進行字符串拼接,結果是「」。
[] + {} // "[object Object]"
進行ToPrimitive,依然是以Number爲轉換標準。
[ ]的結果是「」。
{ }先調用valueOf(),結果是{ },不是原始值,因此繼續調用toString(),結果是「[object Object]」,是原始值,將「[object Object]」返回。
加號兩邊結果都是String類型,因此進行字符串拼接,結果是「[object Object]」。
{} + [] // 0
這道題按照上一題的步驟,講道理的話,結果應該仍是「[object Object]」,但結果卻如人意料——顯示的答案是0!
這是什麼緣由呢?原來{ } + [ ]被解析成了{ };+[ ],前面是一個空代碼塊被略過,剩下+[ ]就成了一元運算。[ ]的原值是」」, 將」」轉化成Number結果是0。
{} + {} // "[object Object][object Object]"
在金絲雀版本的chrome瀏覽器和node中,結果符合預期。
結果是」object Object」。
在普通版本的chrome瀏覽器中結果是NaN。
這是爲何呢?緣由是在node中會將以「{」開始,「}」結束的語句外面包裹一層( ),就變成了({ } + { }),結果就符合預期。而普通版本的chrome依然會解析成{};+{},結果就變成了NaN
developer.mozilla Bitwise operators
JavaScript Unary Operators: Simple and Useful
js隱式裝箱-ToPrimitive