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

資訊專欄INFORMATION COLUMN

JS類型(二):?JS 類型轉換

fjcgreat / 1526人閱讀

前言

在第一篇文章中,講解了 關于“==”時,JS做的類型轉換。從第一篇文章中可以發現 == 時,基本類型都朝著數字類型轉換,還是貼出上篇文章的圖:

那么JS類型轉換都是按照這個模式進行轉換的嗎?例如null能轉換成數字類型嗎?如果能,會轉換成多少?

   const data = 1 + null;
   data;// 1

你想到這個結果了嗎?

正文 基本類型轉換

下面是JS類型轉換的圖表:

圖表顯示null轉換成了0。等等。。。不是說null沒有toString和valueOf的方法的嗎?怎么能轉換成數字呢??

這完全不符合第一篇 == 的套路啊!

具體怎么回事呢?

問題在于JS類型轉換只存在于“==”的時候嗎?肯定不是!

除了==符號會產生類型轉換,"+" "-" "*" "/" ">""<"等符號也會使JS發生類型轉換,所以==的類型轉換規則不是萬能的,只適用于== 。那么應該如何記住類型轉換這張表格呢?其實大部分轉換規則是可以根據第一篇文章講的==的轉換規則得出正確答案的,只是有幾個特殊的例子罷了。

第一篇文章講到了 {}會轉換成字符串"[object Object]",則:

比較特殊的就是undefined null類型:
(1)在進行 == 的時候,undefined null 會嘗試轉換成基本類型,但是不存在toString valueOf方法,所以無論如何是轉換不成基本類型的。
(2)在做字符串拼接的時候會按照表里面的轉換成字符串的規則
(3)在做數值運算的時候會按照表中轉換成數字的規則
最特殊的就是前言中介紹的null轉換為0!

表格中{}轉換成字符串類型和數值類型通常如下:

這樣就能記住這張類型轉換表了。注意這張類型轉換表適用于所以發生類型轉換的情況哦。

Object類型轉換成基本類型

ECMAScript內部有一個函數 ToPrimitive() (這個函數不能在javascript中調用), 下面是轉換規則:

 ToPrimitive(input, PreferredType?)

這個可選的 PreferredType 表示最終要轉換成的基本類型: 它是數字類型或者字符串類型,這取決于ToPrimitive()的結果是否可以轉換成一個數字還是一個字符串。
如果PreferredType 是數字類型, 轉換將遵循以下步驟:

如果輸入的是基本類型,就直接返回它

如果輸入的是Object
(1)會先調用 input.valueOf()。如果結果是基本類型就返回它
(2)如果input.valueOf()不是基本類型,就會調用input.toString(),如果結果是基本類型就返回它
(3)如果還不能得到基本類型,就會拋出TypeError錯誤

如果PreferredType 是String, 第二條的(1)(2)順序反轉一下。

有個地方需要注意,如果指定了要轉換的類型,則會優先調用轉換的方法,例如:

 var s = { toString: function () { return "7"; } }; 
 
 String(s);// toString() => "7"
 Number(s);// valueOf() => 7
Number() 與 parseInt()/parseFloat()

1.Number(num) 會對boolean string null 類型做一些轉換:

parseFloat(true); // same as parseFloat("true") => NaN
Number(true); // 1

parseFloat(null); // same as parseFloat("null") => NaN
Number(null); // 0

parseFloat(""); // NaN
Number(""); // 0

也就是說Number走的是類型轉換那張表。
我們經常使用 +[number]的形式來實現Number(number)。

2.parseInt(num,radix)/parseFloat(num,radix)可以設置解析的進制radix,并且會解析出合法的部分:

 parseFloat("123.45#"); // 123.45
 Number("123.45#"); // NaN

parseFloat("	v
12.34
");

parseInt()/parseFloat()才是真正的解析數字。

3.使用parseInt()去解析數字會有問題

Don’t use parseInt() to convert a number to an integer:coercion to string is an unnecessary detour and even then, the result is not always correct.(《SpeakingJavascript》)

情況一:整數>=21bit之后會用e表示數字大小

 parseInt(1000000000000000000000.5, 10); // 1
 首先轉換成字符串:
 String(1000000000000000000000.5); // "1e+21"

情況二:小數部分>=7bit會用e表示數字大小

parseInt(0.0000008, 10); // 8
String(0.0000008); // "8e-7" 

總結:
1.大多情況下優先使用Number()
2.如果確定是解析字符串,并且取里面能提取出的數字,這種情況下使用parseInt()/parseFloat()
3.非十進制解析的情況下使用parseInt()/parseFloat()

后記

猜測:

在做== 運算時:右側世界undefined null ,永遠不等于左側的世界中的值,是因為undefined null 想轉換成基本類型(和引用類型處理方式一致),但是它們沒有toString valueOf方法;

這一篇undefined null 類型轉換還可以看出:例如 + 運算,JS會根據實現,按照表格中的JS類型轉換,{}轉換成字符串[object Object],null裝換成數字0。

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

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

相關文章

  • js基礎知識學習(

    摘要:基礎知識數據類型轉換把其它數據類型轉換為類型在進行加減乘除數學運算的時候引用數據類型轉換數字通過方法把數組轉換為字符串,然后在調用把字符串轉換為數字中的數學運算加減乘除除了加法有特殊性,其余的運算符都是數學運算,也就 JS基礎知識 JavaScript 數據類型轉換 把其它數據類型轉換為number類型 isNaN 、Number、parseInt、parseFloat在進行加減乘除數...

    Dean 評論0 收藏0
  • 你不知道的JavaScript(

    摘要:第三章原生函數有很多原生函數,為基本的數據類型值提供了封裝對象,,,等。我們可以通過來查看所有返回的對象的內置屬性這個屬性無法直接訪問。這個符號能有奇妙的功能,可以視為。通常用來把轉換為數字,用來將轉換為字符串,用來將取整。 第三章 原生函數JS有很多原生函數,為基本的數據類型值提供了封裝對象,String,Number,Boolean等。我們可以通過{}.call.toStri...

    macg0406 評論0 收藏0
  • javascript基礎

    摘要:一彈窗和輸出執行順序是從上到下執行控制瀏覽器彈出一個警告框讓計算機在頁面中輸出一個內容在中寫一個內容寫可以向中輸出一個內容看我出不出來向控制臺輸出一個內容作用是向控制臺輸出一個內容你猜我在哪出來二編寫位置可以將代碼編寫到外部文件中,然后通過 一.彈窗和輸出 **javascript執行順序是從上到下執行** 1.控制瀏覽器彈出一個警告框 alert(HelloWord); 2.讓計...

    XFLY 評論0 收藏0
  • 【連載】前端個人文章整理-從基礎到入門

    摘要:個人前端文章整理從最開始萌生寫文章的想法,到著手開始寫,再到現在已經一年的時間了,由于工作比較忙,更新緩慢,后面還是會繼更新,現將已經寫好的文章整理一個目錄,方便更多的小伙伴去學習。 showImg(https://segmentfault.com/img/remote/1460000017490740?w=1920&h=1080); 個人前端文章整理 從最開始萌生寫文章的想法,到著手...

    madthumb 評論0 收藏0

發表評論

0條評論

fjcgreat

|高級講師

TA的文章

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