摘要:中有種常用的一元運算符,本文做簡單羅列和說明。第二個過程是相同的,返回。進行,依然是以為轉換標準。在金絲雀版本的瀏覽器和中,結果符合預期。這是為什么呢原因是在中會將以開始,結束的語句外面包裹一層,就變成了,結果就符合預期。
JavaScript中有9種常用的一元運算符,本文做簡單羅列和說明。
加運算符 +將操作數轉換為數字
function與object大部分情況都會被轉換為NaN
除非對象擁有一個名為valueOf函數值且其函數有返回值
+{ valueOf: function(){ return "0xFF" } } //returns 255減運算符 -
也是將操作數轉數字,同時變為負數
邏輯取反運算符 !在取反前,會進行隱式類型轉換
遞增 ++ 和遞減 --將操作數遞增或遞減,注意位置放到前面和后面會有區別,如同C語言中一樣
按位非運算符 ~對任一數值x進行按位非運算操作的結果為-(x+1)
typeof操作數放到typeof的后面,會返回當前操作數的類型,對于數值類型可以準確返回,對于引用類型,Function會返回"function",其他都只會返回"object"
delete刪除數組或對象中特定索引的值
刪除成功時會返回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 3void
丟棄表達式的返回值,而返回undefined
使用方式有void 表達式,void (表達式) 兩種
在加法的過程中,首先把等號左右兩邊進行了求原值ToPrimitive()操作,然后如果兩個原值只要有一個是String類型,就把兩個原值都進行轉化字符串ToString()操作,進行字符串拼接;否則把兩個原值都進行轉化數字ToNumber()操作,進行數字相加。
ToPrimitive(input [, PreferredType])
將input轉換為原始值,PreferredType為可選參數,只接受Number或String,用來設置轉換偏好
一般情況下,對Date求原值,則PreferredType是String,其他Object對象均為Number
PreferredType是String,則先調用toString(),結果不是原始值,則再調用valueOf(),還不是原始值的話則拋出錯誤
PreferredType是Number,則先調用valueOf(),再調用toString()
練習[] + [] // ""
進行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
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/94369.html
摘要:一元正號介紹一元正號運算符位于其操作數前面,計算其操作數的數值,如果操作數不是一個數值,會嘗試將其轉換成一個數值。一元正號施加于,結果還是。 本文適合JavaScript初學者。 一元正號介紹 一元正號運算符(+)位于其操作數前面,計算其操作數的數值,如果操作數不是一個數值,會嘗試將其轉換成一個數值。 盡管一元負號也能轉換非數值類型,但是一元正號是轉換其他對象到數值的最快方法,也是最推...
摘要:與此相對,強類型語言的類型之間不一定有隱式轉換。三為什么是弱類型弱類型相對于強類型來說類型檢查更不嚴格,比如說允許變量類型的隱式轉換,允許強制類型轉換等等。在中,加性運算符有大量的特殊行為。 從++[[]][+[]]+[+[]]==10?深入淺出弱類型JS的隱式轉換 本文純屬原創? 如有雷同? 純屬抄襲? 不甚榮幸! 歡迎轉載! 原文收錄在【我的GitHub博客】,覺得本文寫的不算爛的...
摘要:算術運算符中的算術操作主要通過算術運算符來實現,算術運算符包括一元算術運算符和二元算術運算符兩種。一元算術運算符一元算術運算符用于一個單獨的操作數,并產生一個新值。 算術運算符 javascript中的算術操作主要通過算術運算符來實現,算術運算符包括一元算術運算符和二元算術運算符兩種。 一元算術運算符 一元算術運算符用于一個單獨的操作數,并產生一個新值。在javascript中,一元運...
摘要:例如注意字符串中的負十六進制數字是一個特殊情況,如果你用解析,結果是不正確的。轉換十六進制數時要小心,如果你不知道要轉換對象的類型,不要使用。字符串轉換為數字的方式總結負十六進制數字符串轉換為數字時。 摘要 :JavaScript 是一個神奇的語言,字符串轉數字有 5 種方法,各有各的坑法! 原文: Converting Strings to Number in Javascript...
摘要:為數值固定的表示法,用來表示整數和浮點數的。無論你寫何種進制,它的存儲還是以二進制來存儲的,所以這樣就弄成了浮點數的存儲精確度,浮點數只能精確到位小數。關系運算符關系運算符有和。賦值運算符賦值運算符有六個。 現在的爬蟲越來越難了,不再和之前的那樣,隨便抓個包就可以找到相關的 url ,然后 post 一下或者 get 一下數據就出來了。還有一個可能就是可能你以前用來學習的爬蟲網站太簡單...
閱讀 3118·2021-11-23 09:51
閱讀 1983·2021-09-09 09:32
閱讀 1094·2019-08-30 15:53
閱讀 2965·2019-08-30 11:19
閱讀 2475·2019-08-29 14:15
閱讀 1443·2019-08-29 13:52
閱讀 560·2019-08-29 12:46
閱讀 2827·2019-08-26 12:18