亚洲中字慕日产2020,大陆极品少妇内射AAAAAA,无码av大香线蕉伊人久久,久久精品国产亚洲av麻豆网站

資訊專欄INFORMATION COLUMN

JavaScript中的一元運(yùn)算符

fnngj / 1504人閱讀

摘要:中有種常用的一元運(yùn)算符,本文做簡(jiǎn)單羅列和說(shuō)明。第二個(gè)過(guò)程是相同的,返回。進(jìn)行,依然是以為轉(zhuǎn)換標(biāo)準(zhǔn)。在金絲雀版本的瀏覽器和中,結(jié)果符合預(yù)期。這是為什么呢原因是在中會(huì)將以開(kāi)始,結(jié)束的語(yǔ)句外面包裹一層,就變成了,結(jié)果就符合預(yù)期。

JavaScript中有9種常用的一元運(yùn)算符,本文做簡(jiǎn)單羅列和說(shuō)明。

加運(yùn)算符 +

將操作數(shù)轉(zhuǎn)換為數(shù)字
function與object大部分情況都會(huì)被轉(zhuǎn)換為NaN
除非對(duì)象擁有一個(gè)名為valueOf函數(shù)值且其函數(shù)有返回值

+{
  valueOf: function(){
    return "0xFF"
  }
}
//returns 255
減運(yùn)算符 -

也是將操作數(shù)轉(zhuǎn)數(shù)字,同時(shí)變?yōu)樨?fù)數(shù)

邏輯取反運(yùn)算符 !

在取反前,會(huì)進(jìn)行隱式類型轉(zhuǎn)換

遞增 ++ 和遞減 --

將操作數(shù)遞增或遞減,注意位置放到前面和后面會(huì)有區(qū)別,如同C語(yǔ)言中一樣

按位非運(yùn)算符 ~

對(duì)任一數(shù)值x進(jìn)行按位非運(yùn)算操作的結(jié)果為-(x+1)

typeof

操作數(shù)放到typeof的后面,會(huì)返回當(dāng)前操作數(shù)的類型,對(duì)于數(shù)值類型可以準(zhǔn)確返回,對(duì)于引用類型,F(xiàn)unction會(huì)返回"function",其他都只會(huì)返回"object"

delete

刪除數(shù)組或?qū)ο笾刑囟ㄋ饕闹?br>刪除成功時(shí)會(huì)返回true,刪除失敗時(shí)返回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(){ }

// 刪除對(duì)象
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]

對(duì)于數(shù)組的索引刪除:

// 刪除數(shù)組中的某個(gè)值
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
void

丟棄表達(dá)式的返回值,而返回undefined
使用方式有void 表達(dá)式,void (表達(dá)式) 兩種

附:加法的隱式裝箱

在加法的過(guò)程中,首先把等號(hào)左右兩邊進(jìn)行了求原值ToPrimitive()操作,然后如果兩個(gè)原值只要有一個(gè)是String類型,就把兩個(gè)原值都進(jìn)行轉(zhuǎn)化字符串ToString()操作,進(jìn)行字符串拼接;否則把兩個(gè)原值都進(jìn)行轉(zhuǎn)化數(shù)字ToNumber()操作,進(jìn)行數(shù)字相加。
ToPrimitive(input [, PreferredType])
將input轉(zhuǎn)換為原始值,PreferredType為可選參數(shù),只接受Number或String,用來(lái)設(shè)置轉(zhuǎn)換偏好
一般情況下,對(duì)Date求原值,則PreferredType是String,其他Object對(duì)象均為Number

PreferredType轉(zhuǎn)換策略

PreferredType是String,則先調(diào)用toString(),結(jié)果不是原始值,則再調(diào)用valueOf(),還不是原始值的話則拋出錯(cuò)誤

PreferredType是Number,則先調(diào)用valueOf(),再調(diào)用toString()

練習(xí)
[] + [] // ""

進(jìn)行ToPrimitive,兩個(gè)都是Array對(duì)象,不是Date對(duì)象,所以以Number為轉(zhuǎn)換標(biāo)準(zhǔn),所以先調(diào)用valueOf(),結(jié)果還是[ ],不是原始值,所以繼續(xù)調(diào)用toString(),結(jié)果是“”原始值,將“”回。第二個(gè)[ ]過(guò)程是相同的,返回“”。加號(hào)兩邊結(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]”返回。
加號(hào)兩邊結(jié)果都是String類型,所以進(jìn)行字符串拼接,結(jié)果是“[object Object]”。

{} + [] // 0

這道題按照上一題的步驟,講道理的話,結(jié)果應(yīng)該還是“[object Object]”,但結(jié)果卻如人意料——顯示的答案是0!
這是什么原因呢?原來(lái){ } + [ ]被解析成了{(lán) };+[ ],前面是一個(gè)空代碼塊被略過(guò),剩下+[ ]就成了一元運(yùn)算。[ ]的原值是””, 將””轉(zhuǎn)化成Number結(jié)果是0。

{} + {} // "[object Object][object Object]"

在金絲雀版本的chrome瀏覽器和node中,結(jié)果符合預(yù)期。
結(jié)果是”object Object”。
在普通版本的chrome瀏覽器中結(jié)果是NaN。
這是為什么呢?原因是在node中會(huì)將以“{”開(kāi)始,“}”結(jié)束的語(yǔ)句外面包裹一層( ),就變成了({ } + { }),結(jié)果就符合預(yù)期。而普通版本的chrome依然會(huì)解析成{};+{},結(jié)果就變成了NaN

參考

developer.mozilla Bitwise operators
JavaScript Unary Operators: Simple and Useful
js隱式裝箱-ToPrimitive

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/94369.html

相關(guān)文章

  • JavaScript 一元正號(hào)運(yùn)算符

    摘要:一元正號(hào)介紹一元正號(hào)運(yùn)算符位于其操作數(shù)前面,計(jì)算其操作數(shù)的數(shù)值,如果操作數(shù)不是一個(gè)數(shù)值,會(huì)嘗試將其轉(zhuǎn)換成一個(gè)數(shù)值。一元正號(hào)施加于,結(jié)果還是。 本文適合JavaScript初學(xué)者。 一元正號(hào)介紹 一元正號(hào)運(yùn)算符(+)位于其操作數(shù)前面,計(jì)算其操作數(shù)的數(shù)值,如果操作數(shù)不是一個(gè)數(shù)值,會(huì)嘗試將其轉(zhuǎn)換成一個(gè)數(shù)值。 盡管一元負(fù)號(hào)也能轉(zhuǎn)換非數(shù)值類型,但是一元正號(hào)是轉(zhuǎn)換其他對(duì)象到數(shù)值的最快方法,也是最推...

    chanjarster 評(píng)論0 收藏0
  • 從 ++[[]][+[]]+[+[]]==10? 深入淺出弱類型 JS 的隱式轉(zhuǎn)換

    摘要:與此相對(duì),強(qiáng)類型語(yǔ)言的類型之間不一定有隱式轉(zhuǎn)換。三為什么是弱類型弱類型相對(duì)于強(qiáng)類型來(lái)說(shuō)類型檢查更不嚴(yán)格,比如說(shuō)允許變量類型的隱式轉(zhuǎn)換,允許強(qiáng)制類型轉(zhuǎn)換等等。在中,加性運(yùn)算符有大量的特殊行為。 從++[[]][+[]]+[+[]]==10?深入淺出弱類型JS的隱式轉(zhuǎn)換 本文純屬原創(chuàng)? 如有雷同? 純屬抄襲? 不甚榮幸! 歡迎轉(zhuǎn)載! 原文收錄在【我的GitHub博客】,覺(jué)得本文寫(xiě)的不算爛的...

    miya 評(píng)論0 收藏0
  • javascript —— 運(yùn)算符

    摘要:算術(shù)運(yùn)算符中的算術(shù)操作主要通過(guò)算術(shù)運(yùn)算符來(lái)實(shí)現(xiàn),算術(shù)運(yùn)算符包括一元算術(shù)運(yùn)算符和二元算術(shù)運(yùn)算符兩種。一元算術(shù)運(yùn)算符一元算術(shù)運(yùn)算符用于一個(gè)單獨(dú)的操作數(shù),并產(chǎn)生一個(gè)新值。 算術(shù)運(yùn)算符 javascript中的算術(shù)操作主要通過(guò)算術(shù)運(yùn)算符來(lái)實(shí)現(xiàn),算術(shù)運(yùn)算符包括一元算術(shù)運(yùn)算符和二元算術(shù)運(yùn)算符兩種。 一元算術(shù)運(yùn)算符 一元算術(shù)運(yùn)算符用于一個(gè)單獨(dú)的操作數(shù),并產(chǎn)生一個(gè)新值。在javascript中,一元運(yùn)...

    Ethan815 評(píng)論0 收藏0
  • JavaScript字符串轉(zhuǎn)數(shù)字的5種方法及其陷阱

    摘要:例如注意字符串中的負(fù)十六進(jìn)制數(shù)字是一個(gè)特殊情況,如果你用解析,結(jié)果是不正確的。轉(zhuǎn)換十六進(jìn)制數(shù)時(shí)要小心,如果你不知道要轉(zhuǎn)換對(duì)象的類型,不要使用。字符串轉(zhuǎn)換為數(shù)字的方式總結(jié)負(fù)十六進(jìn)制數(shù)字符串轉(zhuǎn)換為數(shù)字時(shí)。 摘要 :JavaScript 是一個(gè)神奇的語(yǔ)言,字符串轉(zhuǎn)數(shù)字有 5 種方法,各有各的坑法! 原文: Converting Strings to Number in Javascript...

    shengguo 評(píng)論0 收藏0
  • 爬蟲(chóng)不得不學(xué)之 JavaScript 入門篇

    摘要:為數(shù)值固定的表示法,用來(lái)表示整數(shù)和浮點(diǎn)數(shù)的。無(wú)論你寫(xiě)何種進(jìn)制,它的存儲(chǔ)還是以二進(jìn)制來(lái)存儲(chǔ)的,所以這樣就弄成了浮點(diǎn)數(shù)的存儲(chǔ)精確度,浮點(diǎn)數(shù)只能精確到位小數(shù)。關(guān)系運(yùn)算符關(guān)系運(yùn)算符有和。賦值運(yùn)算符賦值運(yùn)算符有六個(gè)。 現(xiàn)在的爬蟲(chóng)越來(lái)越難了,不再和之前的那樣,隨便抓個(gè)包就可以找到相關(guān)的 url ,然后 post 一下或者 get 一下數(shù)據(jù)就出來(lái)了。還有一個(gè)可能就是可能你以前用來(lái)學(xué)習(xí)的爬蟲(chóng)網(wǎng)站太簡(jiǎn)單...

    tracymac7 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

fnngj

|高級(jí)講師

TA的文章

閱讀更多
最新活動(dòng)
閱讀需要支付1元查看
<