国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

JavaScript核心概念(1):類型轉(zhuǎn)換

tracymac7 / 1193人閱讀

摘要:核心內(nèi)置類,會(huì)嘗試先于可以理解為對(duì)象優(yōu)先轉(zhuǎn)換成數(shù)字例外的是,利用的是轉(zhuǎn)換。非核心的對(duì)象,通過自己的實(shí)現(xiàn)中定義的方法轉(zhuǎn)換成原始值。

本文首發(fā)于個(gè)人博客

看到這個(gè)是不是有一種想打人的感覺,垃圾 JavaScript,這特么都什么鬼,相信很多人不管是筆試還是面試,都被 JS 的類型轉(zhuǎn)換難道過,相信認(rèn)真看完我這篇文章,媽媽再也不用擔(dān)心類型轉(zhuǎn)換的問題了。

原始值到原始值的轉(zhuǎn)換

原始值轉(zhuǎn)化為布爾值

所有的假值(undefined、null、0、-0、NaN、””)會(huì)被轉(zhuǎn)化為 false,其他都會(huì)被轉(zhuǎn)為 true

原始值轉(zhuǎn)化為字符串
都相當(dāng)于 原始值 + ""

原始值轉(zhuǎn)為數(shù)字

布爾轉(zhuǎn)數(shù)字:true -> 1, false -> 0

字符串轉(zhuǎn)數(shù)字:以數(shù)字表示的字符串可以直接會(huì)轉(zhuǎn)為字符串,如果字符串頭尾有空格會(huì)忽略,但是空格在中間,轉(zhuǎn)換結(jié)果就是 NaN。

  +" 66" // 66
  +" 6 7 " // NaN

原始值到對(duì)象的轉(zhuǎn)換

null 和 undefined 轉(zhuǎn)對(duì)象直接拋異常

原始值通過調(diào)用 String()、Number()、Boolean()構(gòu)造函數(shù),轉(zhuǎn)換為他們各自的包裝對(duì)象

對(duì)象到原始值的轉(zhuǎn)換

對(duì)象轉(zhuǎn)為布爾都為 true

對(duì)象到字符串

如果對(duì)象有 toString() 方法,就調(diào)用 toString() 方法。如果該方法返回原始值,就講這個(gè)值轉(zhuǎn)化為字符串。

如果對(duì)象沒有 toString() 方法或者 該方法返回的不是原始值,就會(huì)調(diào)用該對(duì)象的 valueOf() 方法。如果存在就調(diào)用這個(gè)方法,如果返回值是原始值,就轉(zhuǎn)化為字符串。

否則就報(bào)錯(cuò)

對(duì)象到數(shù)字

對(duì)象轉(zhuǎn)化為數(shù)字做了跟對(duì)象轉(zhuǎn)化為字符串做了想同的事兒,不同的是后者是先調(diào)用 valueOf 方法,如果調(diào)用失敗或者返回不是原始值,就調(diào)用 toString 方法。

補(bǔ)充。一些常用內(nèi)置對(duì)象 toString 方法和 valueOf 的轉(zhuǎn)換規(guī)則

toString 相關(guān)

- valueOf 相關(guān)

== 運(yùn)算符如何進(jìn)行類型轉(zhuǎn)換

如果一個(gè)值是null,另一個(gè)值是undefined,則相等

如果一個(gè)是字符串,另一個(gè)值是數(shù)字,則把字符串轉(zhuǎn)換成數(shù)字,進(jìn)行比較

如果任意值是true,則把true轉(zhuǎn)換成1再進(jìn)行比較;如果任意值是false,則把false轉(zhuǎn)換成0再進(jìn)行比較

如果一個(gè)是對(duì)象,另一個(gè)是數(shù)值或字符串,把對(duì)象轉(zhuǎn)換成基礎(chǔ)類型的值再比較。對(duì)象轉(zhuǎn)換成基礎(chǔ)類型,利用它的 toString 或者 valueOf 方法。 js 核心內(nèi)置類,會(huì)嘗試 valueOf 先于 toString(可以理解為對(duì)象優(yōu)先轉(zhuǎn)換成數(shù)字);例外的是 Date,Date 利用的是 toString 轉(zhuǎn)換。非 js 核心的對(duì)象,通過自己的實(shí)現(xiàn)中定義的方法轉(zhuǎn)換成原始值。

+ 運(yùn)算符如何進(jìn)行類型轉(zhuǎn)化

如果作為一元運(yùn)算符就是轉(zhuǎn)化為數(shù)字,常常用來將字符串轉(zhuǎn)化為數(shù)字

+"2" //  2
2+false // 0

如果作為二元運(yùn)算符就有兩種轉(zhuǎn)換方式

兩邊如果有字符串,另一邊一會(huì)轉(zhuǎn)化為字符串進(jìn)行相加

如果沒有字符串,兩邊都會(huì)轉(zhuǎn)化為數(shù)字進(jìn)行相加,對(duì)象也根據(jù)前面的方法轉(zhuǎn)化為原始值數(shù)字。

如果其中的一個(gè)操作數(shù)是對(duì)象,則將對(duì)象轉(zhuǎn)換成原始值,日期對(duì)象會(huì)通過 toString() 方法進(jìn)行轉(zhuǎn)換,其他對(duì)象通過 valueOf()方法進(jìn)行轉(zhuǎn)換,但是大多數(shù)方法都是不具備可用的 valueOf() 方法,所以還是會(huì)通過 toString() 方法執(zhí)行轉(zhuǎn)換。

流程圖如下:

實(shí)戰(zhàn)分析 1. []+[] // ""

_1. 首先運(yùn)算符是 + 運(yùn)算符而且很明顯是二元運(yùn)算符,并且有對(duì)象,所以選擇最后一點(diǎn),操作數(shù)是對(duì)象,將對(duì)象轉(zhuǎn)換為原始值。

_2. 兩邊對(duì)象都是數(shù)組,左邊的數(shù)組先調(diào)用 valueOf() 方法無果,然后去調(diào)用 toString(), 方法,在 toString() 的轉(zhuǎn)化規(guī)則里面有『將數(shù)組轉(zhuǎn)化為字符串,用逗號(hào)分隔』,由于沒有其他元素,所以直接是空字符串 “”。

![](https://user-gold-cdn.xitu.io/2018/8/7/165124228cd61ccc?w=236&h=64&f=png&s=2453)

_3. 因?yàn)榧犹?hào)有一邊是字符串了,所以另外一邊也轉(zhuǎn)為 字符串,所以兩邊都是空字符串 “”。

_4. 所以加起來也是空字符串 “”。

2. (! + [] + [] + ![]).length // 9

_1. 首先我們會(huì)看到挺多一元運(yùn)算符,「+」、「!」,對(duì)于一元運(yùn)算符是右結(jié)合性,所以可以畫出以下運(yùn)算順序。

_2. 對(duì)于+[],數(shù)組是會(huì)被轉(zhuǎn)化為數(shù)字的而不是字符串,可見「+ 運(yùn)算符如何進(jìn)行類型轉(zhuǎn)化」的第一條,所以經(jīng)過第一步就會(huì)轉(zhuǎn)化為

(!0 + [] + "false").length

_3. 第二步比較簡(jiǎn)單,0 轉(zhuǎn)化為布爾值就是 false,所以經(jīng)過第二步就轉(zhuǎn)化為

(true + [] + "false").length

_4. 第三步中間的 []會(huì)轉(zhuǎn)為空字符串,在「+ 運(yùn)算符如何進(jìn)行類型轉(zhuǎn)化」第二條的第三點(diǎn),對(duì)象會(huì)被轉(zhuǎn)轉(zhuǎn)化為原始值,就是空字符,所以經(jīng)過第三步之后就會(huì)變成

("true" + "false").length

_5. 第五步就比較簡(jiǎn)單啦,最終就是

"truefalse".length // 9

附錄:


《JavaScript權(quán)威指南》中類型轉(zhuǎn)換表格


個(gè)人公眾號(hào),歡迎繼續(xù)交流

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

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/96800.html

相關(guān)文章

  • 33 個(gè) js 核心概念(四):顯式 (名義) 與 隱式 (鴨子)類型轉(zhuǎn)換

    摘要:相對(duì)于顯式使用,隱式轉(zhuǎn)換則更加簡(jiǎn)潔。隱式轉(zhuǎn)換為布爾值將其他類型值隱式轉(zhuǎn)換為布爾值是我們最常用的一種轉(zhuǎn)換。在以下場(chǎng)景中,都是進(jìn)行判斷,而只要傳入的值不是布爾值,都會(huì)通過隱式類型轉(zhuǎn)換轉(zhuǎn)為布爾值。原文地址阿木木的博客與隱式鴨子類型轉(zhuǎn)換 showImg(https://segmentfault.com/img/remote/1460000017309581); 前言 說實(shí)話,JavaScrip...

    hoohack 評(píng)論0 收藏0
  • jsweet中英文文檔,java代碼轉(zhuǎn)js代碼

    摘要:例如允許的對(duì)象默認(rèn)情況下,通過使用內(nèi)置宏將核心對(duì)象和方法映射到。例如這被轉(zhuǎn)換為以下代碼類可以定義構(gòu)造函數(shù),具有超類,并且可以像在中一樣實(shí)例化。因此,它不違反原則。用于聲明該對(duì)象可以用作構(gòu)造函數(shù)。 這個(gè)工具可以將java代碼轉(zhuǎn)為js代碼,從而可以使用java編寫前端代碼 如果排版看著費(fèi)勁可以下載下方html,打開html后使用google翻譯 JSweet語言規(guī)范版本:2.x(快照) 作...

    Near_Li 評(píng)論0 收藏0
  • jsweet中英文文檔,java代碼轉(zhuǎn)js代碼

    摘要:例如允許的對(duì)象默認(rèn)情況下,通過使用內(nèi)置宏將核心對(duì)象和方法映射到。例如這被轉(zhuǎn)換為以下代碼類可以定義構(gòu)造函數(shù),具有超類,并且可以像在中一樣實(shí)例化。因此,它不違反原則。用于聲明該對(duì)象可以用作構(gòu)造函數(shù)。 這個(gè)工具可以將java代碼轉(zhuǎn)為js代碼,從而可以使用java編寫前端代碼 如果排版看著費(fèi)勁可以下載下方html,打開html后使用google翻譯 JSweet語言規(guī)范版本:2.x(快照) 作...

    Mr_houzi 評(píng)論0 收藏0
  • JavaSceipt核心語法——運(yùn)算符

    摘要:運(yùn)算符運(yùn)算符一共分為六種算數(shù)運(yùn)算符比較運(yùn)算符邏輯運(yùn)算符賦值運(yùn)算符字符串聯(lián)接運(yùn)算符條件運(yùn)算符運(yùn)算符的概念提供的一組用于操作數(shù)據(jù)值的運(yùn)算符操作符。這些運(yùn)算符可以按照作用的不同或者操作變量數(shù)量的不同進(jìn)行分類。 運(yùn)算符 ——運(yùn)算符一共分為六種;1.算數(shù)運(yùn)算符2.比較運(yùn)算符3.邏輯運(yùn)算符4.賦值運(yùn)算符5.字符串聯(lián)接運(yùn)算符6.條件運(yùn)算符——運(yùn)算符的概念;JavaScript提供的一組用于操作數(shù)據(jù)值...

    劉德剛 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)筆記系列(一)

    摘要:只是瀏覽器只是實(shí)現(xiàn)可能的宿主環(huán)境之一,其他宿主環(huán)境包括和。級(jí)別級(jí)由兩個(gè)模塊組成核心和。有效不推薦有一點(diǎn)必須注意,即用操作符定義的變量將成為定義該變量的作用域的局部變量。會(huì)返回判斷相等符認(rèn)為兩者相等。顯示因此盡量避免這樣運(yùn)算。 一:JavaScript組成部分 JavaScript是由三個(gè)不同部分組成的,核心(ECMAScript) 、文檔對(duì)象模型(DOM)和瀏覽器對(duì)象模型(BOM)。 ...

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

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

0條評(píng)論

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