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

資訊專欄INFORMATION COLUMN

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

tracymac7 / 1195人閱讀

摘要:核心內置類,會嘗試先于可以理解為對象優先轉換成數字例外的是,利用的是轉換。非核心的對象,通過自己的實現中定義的方法轉換成原始值。

本文首發于個人博客

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

原始值到原始值的轉換

原始值轉化為布爾值

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

原始值轉化為字符串
都相當于 原始值 + ""

原始值轉為數字

布爾轉數字:true -> 1, false -> 0

字符串轉數字:以數字表示的字符串可以直接會轉為字符串,如果字符串頭尾有空格會忽略,但是空格在中間,轉換結果就是 NaN。

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

原始值到對象的轉換

null 和 undefined 轉對象直接拋異常

原始值通過調用 String()、Number()、Boolean()構造函數,轉換為他們各自的包裝對象

對象到原始值的轉換

對象轉為布爾都為 true

對象到字符串

如果對象有 toString() 方法,就調用 toString() 方法。如果該方法返回原始值,就講這個值轉化為字符串。

如果對象沒有 toString() 方法或者 該方法返回的不是原始值,就會調用該對象的 valueOf() 方法。如果存在就調用這個方法,如果返回值是原始值,就轉化為字符串。

否則就報錯

對象到數字

對象轉化為數字做了跟對象轉化為字符串做了想同的事兒,不同的是后者是先調用 valueOf 方法,如果調用失敗或者返回不是原始值,就調用 toString 方法。

補充。一些常用內置對象 toString 方法和 valueOf 的轉換規則

toString 相關

- valueOf 相關

== 運算符如何進行類型轉換

如果一個值是null,另一個值是undefined,則相等

如果一個是字符串,另一個值是數字,則把字符串轉換成數字,進行比較

如果任意值是true,則把true轉換成1再進行比較;如果任意值是false,則把false轉換成0再進行比較

如果一個是對象,另一個是數值或字符串,把對象轉換成基礎類型的值再比較。對象轉換成基礎類型,利用它的 toString 或者 valueOf 方法。 js 核心內置類,會嘗試 valueOf 先于 toString(可以理解為對象優先轉換成數字);例外的是 Date,Date 利用的是 toString 轉換。非 js 核心的對象,通過自己的實現中定義的方法轉換成原始值。

+ 運算符如何進行類型轉化

如果作為一元運算符就是轉化為數字,常常用來將字符串轉化為數字

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

如果作為二元運算符就有兩種轉換方式

兩邊如果有字符串,另一邊一會轉化為字符串進行相加

如果沒有字符串,兩邊都會轉化為數字進行相加,對象也根據前面的方法轉化為原始值數字。

如果其中的一個操作數是對象,則將對象轉換成原始值,日期對象會通過 toString() 方法進行轉換,其他對象通過 valueOf()方法進行轉換,但是大多數方法都是不具備可用的 valueOf() 方法,所以還是會通過 toString() 方法執行轉換。

流程圖如下:

實戰分析 1. []+[] // ""

_1. 首先運算符是 + 運算符而且很明顯是二元運算符,并且有對象,所以選擇最后一點,操作數是對象,將對象轉換為原始值。

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

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

_3. 因為加號有一邊是字符串了,所以另外一邊也轉為 字符串,所以兩邊都是空字符串 “”。

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

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

_1. 首先我們會看到挺多一元運算符,「+」、「!」,對于一元運算符是右結合性,所以可以畫出以下運算順序。

_2. 對于+[],數組是會被轉化為數字的而不是字符串,可見「+ 運算符如何進行類型轉化」的第一條,所以經過第一步就會轉化為

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

_3. 第二步比較簡單,0 轉化為布爾值就是 false,所以經過第二步就轉化為

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

_4. 第三步中間的 []會轉為空字符串,在「+ 運算符如何進行類型轉化」第二條的第三點,對象會被轉轉化為原始值,就是空字符,所以經過第三步之后就會變成

("true" + "false").length

_5. 第五步就比較簡單啦,最終就是

"truefalse".length // 9

附錄:


《JavaScript權威指南》中類型轉換表格


個人公眾號,歡迎繼續交流

文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。

轉載請注明本文地址:http://m.specialneedsforspecialkids.com/yun/96800.html

相關文章

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

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

    hoohack 評論0 收藏0
  • jsweet中英文文檔,java代碼轉js代碼

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

    Near_Li 評論0 收藏0
  • jsweet中英文文檔,java代碼轉js代碼

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

    Mr_houzi 評論0 收藏0
  • JavaSceipt核心語法——運算符

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

    劉德剛 評論0 收藏0
  • JavaScript學習筆記系列(一)

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

    Andrman 評論0 收藏0

發表評論

0條評論

tracymac7

|高級講師

TA的文章

閱讀更多
最新活動
閱讀需要支付1元查看
<