摘要:中有種常用的一元運算符,本文做簡單羅列和說明。第二個過程是相同的,返回。進(jìn)行,依然是以為轉(zhuǎn)換標(biāo)準(zhǔn)。在金絲雀版本的瀏覽器和中,結(jié)果符合預(yù)期。這是為什么呢原因是在中會將以開始,結(jié)束的語句外面包裹一層,就變成了,結(jié)果就符合預(yù)期。
JavaScript中有9種常用的一元運算符,本文做簡單羅列和說明。
加運算符 +將操作數(shù)轉(zhuǎn)換為數(shù)字
function與object大部分情況都會被轉(zhuǎn)換為NaN
除非對象擁有一個名為valueOf函數(shù)值且其函數(shù)有返回值
+{ valueOf: function(){ return "0xFF" } } //returns 255減運算符 -
也是將操作數(shù)轉(zhuǎn)數(shù)字,同時變?yōu)樨?fù)數(shù)
邏輯取反運算符 !在取反前,會進(jìn)行隱式類型轉(zhuǎn)換
遞增 ++ 和遞減 --將操作數(shù)遞增或遞減,注意位置放到前面和后面會有區(qū)別,如同C語言中一樣
按位非運算符 ~對任一數(shù)值x進(jìn)行按位非運算操作的結(jié)果為-(x+1)
typeof操作數(shù)放到typeof的后面,會返回當(dāng)前操作數(shù)的類型,對于數(shù)值類型可以準(zhǔn)確返回,對于引用類型,F(xiàn)unction會返回"function",其他都只會返回"object"
delete刪除數(shù)組或?qū)ο笾刑囟ㄋ饕闹?br>刪除成功時會返回true,刪除失敗時返回false
// 刪除變量 var hi = 1; delete hi; // returns false console.log(hi); // returns 1 // 刪除函數(shù) 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"} //刪除數(shù)組 var code = [1,1,2,3,5] delete code // returns false console.log(code); // [1,1,2,3,5]
對于數(shù)組的索引刪除:
// 刪除數(shù)組中的某個值 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
丟棄表達(dá)式的返回值,而返回undefined
使用方式有void 表達(dá)式,void (表達(dá)式) 兩種
在加法的過程中,首先把等號左右兩邊進(jìn)行了求原值ToPrimitive()操作,然后如果兩個原值只要有一個是String類型,就把兩個原值都進(jìn)行轉(zhuǎn)化字符串ToString()操作,進(jìn)行字符串拼接;否則把兩個原值都進(jìn)行轉(zhuǎn)化數(shù)字ToNumber()操作,進(jìn)行數(shù)字相加。
ToPrimitive(input [, PreferredType])
將input轉(zhuǎn)換為原始值,PreferredType為可選參數(shù),只接受Number或String,用來設(shè)置轉(zhuǎn)換偏好
一般情況下,對Date求原值,則PreferredType是String,其他Object對象均為Number
PreferredType是String,則先調(diào)用toString(),結(jié)果不是原始值,則再調(diào)用valueOf(),還不是原始值的話則拋出錯誤
PreferredType是Number,則先調(diào)用valueOf(),再調(diào)用toString()
練習(xí)[] + [] // ""
進(jìn)行ToPrimitive,兩個都是Array對象,不是Date對象,所以以Number為轉(zhuǎn)換標(biāo)準(zhǔn),所以先調(diào)用valueOf(),結(jié)果還是[ ],不是原始值,所以繼續(xù)調(diào)用toString(),結(jié)果是“”原始值,將“”回。第二個[ ]過程是相同的,返回“”。加號兩邊結(jié)果都是String類型,所以進(jìn)行字符串拼接,結(jié)果是“”。
[] + {} // "[object Object]"
進(jìn)行ToPrimitive,依然是以Number為轉(zhuǎn)換標(biāo)準(zhǔn)。
[ ]的結(jié)果是“”。
{ }先調(diào)用valueOf(),結(jié)果是{ },不是原始值,所以繼續(xù)調(diào)用toString(),結(jié)果是“[object Object]”,是原始值,將“[object Object]”返回。
加號兩邊結(jié)果都是String類型,所以進(jìn)行字符串拼接,結(jié)果是“[object Object]”。
{} + [] // 0
這道題按照上一題的步驟,講道理的話,結(jié)果應(yīng)該還是“[object Object]”,但結(jié)果卻如人意料——顯示的答案是0!
這是什么原因呢?原來{ } + [ ]被解析成了{(lán) };+[ ],前面是一個空代碼塊被略過,剩下+[ ]就成了一元運算。[ ]的原值是””, 將””轉(zhuǎn)化成Number結(jié)果是0。
{} + {} // "[object Object][object Object]"
在金絲雀版本的chrome瀏覽器和node中,結(jié)果符合預(yù)期。
結(jié)果是”object Object”。
在普通版本的chrome瀏覽器中結(jié)果是NaN。
這是為什么呢?原因是在node中會將以“{”開始,“}”結(jié)束的語句外面包裹一層( ),就變成了({ } + { }),結(jié)果就符合預(yù)期。而普通版本的chrome依然會解析成{};+{},結(jié)果就變成了NaN
developer.mozilla Bitwise operators
JavaScript Unary Operators: Simple and Useful
js隱式裝箱-ToPrimitive
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://specialneedsforspecialkids.com/yun/94369.html
摘要:一元正號介紹一元正號運算符位于其操作數(shù)前面,計算其操作數(shù)的數(shù)值,如果操作數(shù)不是一個數(shù)值,會嘗試將其轉(zhuǎn)換成一個數(shù)值。一元正號施加于,結(jié)果還是。 本文適合JavaScript初學(xué)者。 一元正號介紹 一元正號運算符(+)位于其操作數(shù)前面,計算其操作數(shù)的數(shù)值,如果操作數(shù)不是一個數(shù)值,會嘗試將其轉(zhuǎn)換成一個數(shù)值。 盡管一元負(fù)號也能轉(zhuǎn)換非數(shù)值類型,但是一元正號是轉(zhuǎn)換其他對象到數(shù)值的最快方法,也是最推...
摘要:與此相對,強(qiáng)類型語言的類型之間不一定有隱式轉(zhuǎn)換。三為什么是弱類型弱類型相對于強(qiáng)類型來說類型檢查更不嚴(yán)格,比如說允許變量類型的隱式轉(zhuǎn)換,允許強(qiáng)制類型轉(zhuǎn)換等等。在中,加性運算符有大量的特殊行為。 從++[[]][+[]]+[+[]]==10?深入淺出弱類型JS的隱式轉(zhuǎn)換 本文純屬原創(chuàng)? 如有雷同? 純屬抄襲? 不甚榮幸! 歡迎轉(zhuǎn)載! 原文收錄在【我的GitHub博客】,覺得本文寫的不算爛的...
摘要:算術(shù)運算符中的算術(shù)操作主要通過算術(shù)運算符來實現(xiàn),算術(shù)運算符包括一元算術(shù)運算符和二元算術(shù)運算符兩種。一元算術(shù)運算符一元算術(shù)運算符用于一個單獨的操作數(shù),并產(chǎn)生一個新值。 算術(shù)運算符 javascript中的算術(shù)操作主要通過算術(shù)運算符來實現(xiàn),算術(shù)運算符包括一元算術(shù)運算符和二元算術(shù)運算符兩種。 一元算術(shù)運算符 一元算術(shù)運算符用于一個單獨的操作數(shù),并產(chǎn)生一個新值。在javascript中,一元運...
摘要:例如注意字符串中的負(fù)十六進(jìn)制數(shù)字是一個特殊情況,如果你用解析,結(jié)果是不正確的。轉(zhuǎn)換十六進(jìn)制數(shù)時要小心,如果你不知道要轉(zhuǎn)換對象的類型,不要使用。字符串轉(zhuǎn)換為數(shù)字的方式總結(jié)負(fù)十六進(jìn)制數(shù)字符串轉(zhuǎn)換為數(shù)字時。 摘要 :JavaScript 是一個神奇的語言,字符串轉(zhuǎn)數(shù)字有 5 種方法,各有各的坑法! 原文: Converting Strings to Number in Javascript...
摘要:為數(shù)值固定的表示法,用來表示整數(shù)和浮點數(shù)的。無論你寫何種進(jìn)制,它的存儲還是以二進(jìn)制來存儲的,所以這樣就弄成了浮點數(shù)的存儲精確度,浮點數(shù)只能精確到位小數(shù)。關(guān)系運算符關(guān)系運算符有和。賦值運算符賦值運算符有六個。 現(xiàn)在的爬蟲越來越難了,不再和之前的那樣,隨便抓個包就可以找到相關(guān)的 url ,然后 post 一下或者 get 一下數(shù)據(jù)就出來了。還有一個可能就是可能你以前用來學(xué)習(xí)的爬蟲網(wǎng)站太簡單...
閱讀 3114·2021-11-23 09:51
閱讀 1974·2021-09-09 09:32
閱讀 1084·2019-08-30 15:53
閱讀 2957·2019-08-30 11:19
閱讀 2464·2019-08-29 14:15
閱讀 1432·2019-08-29 13:52
閱讀 553·2019-08-29 12:46
閱讀 2818·2019-08-26 12:18