成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

js數(shù)據(jù)類型轉(zhuǎn)化

dmlllll / 732人閱讀

數(shù)據(jù)類型轉(zhuǎn)化表

首先上數(shù)據(jù)類型轉(zhuǎn)化表,便于遇到問題直接查看

字符串 數(shù)字 布爾值 對象
undefined
null
"undefined"
"null"
NaN false
false
throws TypeError
throws TypeError
true
false
"true"
"false"
1
0
new Boolean(true)
new Boolean(false)
""(空字符串)
"1.2"(非空,數(shù)字)
"one"(非空,非數(shù)字)
0
1.2
NaN
false
true
true
new String("")
new String("1.2")
new String("one")
0
-0
NaN
Infinity
-Infinity
1(非零)
"0"
"0"
"NaN"
"Infinity"
"-Infinity"
"1"
new Number(0)
new Number(-0)
new Number(NaN)
new Number(Infinity)
new Number(-Infinity)
new Number(1)
{}(任意對象)
[]
[9]
["a"]
{}.toString() -> {}.valueOf()
""
"9"
使用join()
{}.valueOf() -> {}.toString()
0
9
NaN
NaN
true
true
true
true
顯式轉(zhuǎn)換

顯示轉(zhuǎn)換最簡單的是使用Boolean()、Number()、String()或Object()構(gòu)造函數(shù)

Number("3"); // 3
String(false); // "false"
Boolean([]); // true
Object(3); // new Number(3)

ps:值得注意的是,試圖把undefined或null轉(zhuǎn)換為對象,會拋出一個類型錯誤,而Object()顯示轉(zhuǎn)換不會,而是返回一個新創(chuàng)建的空對象

顯示轉(zhuǎn)換還有toString()toFixed()、toExponential()、toPrecision()parseInt()、parseFloat()方法,不細說

隱式轉(zhuǎn)換

隱式轉(zhuǎn)換分為三種:

將值轉(zhuǎn)換為原始值,ToPrimitive(input, PreferredType)

將值轉(zhuǎn)化為數(shù)字,ToNumber()

將值轉(zhuǎn)化為字符串,ToString()

原始類型數(shù)據(jù)轉(zhuǎn)化相對比較簡單,下面值看對象到原始類型的轉(zhuǎn)換方式

對象的toString()和valueOf()方法

所有對象繼承了兩個轉(zhuǎn)換方法:toString()

一般對象轉(zhuǎn)化成[object object] {x: 1, y: 2}.toString(); // "[object object]"

數(shù)組轉(zhuǎn)化成元素間加逗號 [1, 2, 3].toString(); // "1,2,3"

函數(shù)轉(zhuǎn)化成定義(function(x){}).toString(); // "function(x) {}"

正則轉(zhuǎn)化為直接量字符串 /d+/g.toString(); // "/d+/g"

日期轉(zhuǎn)化為日期字符串 new Date(2000, 1, 1).toString(); // "Tue Feb 01 2000 00:00:00 GMT+0800 (中國標準時間)"

valueOf()方法

大多數(shù)對象無法真正表示為一個原始值,valueOf()簡單返回對象本身

日期對象是一個特例,返回毫秒數(shù) new Date(2010, 0, 1).valueOf(); // 12623328000

對象到字符串的轉(zhuǎn)換

如果對象具有toString()方法,則調(diào)用這個方法,如果它返回一個原始值,將這個值轉(zhuǎn)化為字符串,并返回這個字符串結(jié)果

如果對象沒有toString()方法,或者個這個方法不返回一個原始值,那么就會調(diào)用valueOf()方法。如果存在這個方法,則調(diào)用它,如果返回值是一個原始值,將這個值轉(zhuǎn)化為只服從,并返回這個字符串結(jié)果

否則,就會拋出一個類型錯誤異常

對象到數(shù)字的轉(zhuǎn)換

如果對象具有valueOf()方法,后者返回個億原始值,則將這個原始值轉(zhuǎn)化為數(shù)字,并返回這個數(shù)字

否則,如果對象有toString()方法,后者返回一個原始值,并轉(zhuǎn)化成數(shù)字返回

否則,拋出一個類型錯誤異常

舉個栗子: ({} + {}) = ?
兩個對象的值進行+運算符,要先進行隱式轉(zhuǎn)換成原始類型才能計算
1. ToPrimitive轉(zhuǎn)換,因為沒有指定PreferredType類型,默認為Number
2. 執(zhí)行`valueOf()`方法,`{}.valueOf()`返回的還是{}對象
3. 繼續(xù)執(zhí)行`toString()`方法,`({}).toString()`返回`[Object Object]`,是原始值

所以最后結(jié)果:[Object Object][Object Object]
ps:在Firefox中返回結(jié)果為NaN,因為第一個{}被當作一個代碼塊,沒有解析轉(zhuǎn)換,變成了+{},也就是+[Object Object],最終變成NaN

==元算符隱式轉(zhuǎn)換

==運算符應用和考察點很多,直接上ES5規(guī)范文檔

比較運算 x==y, 其中 x 和 y 是值,返回 true 或者 false。這樣的比較按如下方式進行:
1、若 Type(x) 與 Type(y) 相同, 則

    1* 若 Type(x) 為 Undefined, 返回 true。
    2* 若 Type(x) 為 Null, 返回 true。
    3* 若 Type(x) 為 Number, 則

        (1)、若 x 為 NaN, 返回 false。
        (2)、若 y 為 NaN, 返回 false。
        (3)、若 x 與 y 為相等數(shù)值, 返回 true。
        (4)、若 x 為 +0 且 y 為 ?0, 返回 true。
        (5)、若 x 為 ?0 且 y 為 +0, 返回 true。
        (6)、返回 false。

    4* 若 Type(x) 為 String, 則當 x 和 y 為完全相同的字符序列(長度相等且相同字符在相同位置)時返回 true。 否則, 返回 false。
    5* 若 Type(x) 為 Boolean, 當 x 和 y 為同為 true 或者同為 false 時返回 true。 否則, 返回 false。
    6*  當 x 和 y 為引用同一對象時返回 true。否則,返回 false。
2、若 x 為 null 且 y 為 undefined, 返回 true。
3、若 x 為 undefined 且 y 為 null, 返回 true。
4、若 Type(x) 為 Number 且 Type(y) 為 String,返回比較 x == ToNumber(y) 的結(jié)果。
5、若 Type(x) 為 String 且 Type(y) 為 Number,返回比較 ToNumber(x) == y 的結(jié)果。
6、若 Type(x) 為 Boolean, 返回比較 ToNumber(x) == y 的結(jié)果。
7、若 Type(y) 為 Boolean, 返回比較 x == ToNumber(y) 的結(jié)果。
8、若 Type(x) 為 String 或 Number,且 Type(y) 為 Object,返回比較 x == ToPrimitive(y) 的結(jié)果。
9、若 Type(x) 為 Object 且 Type(y) 為 String 或 Number, 返回比較 ToPrimitive(x) == y 的結(jié)果。
10、返回 false。

總結(jié)起來有如下幾點值得注意

NaN !== NaN

x,y 為null、undefined兩者中一個 // 返回true

x、y為Number和String類型時,則轉(zhuǎn)換為Number類型比較

有Boolean類型時,Boolean轉(zhuǎn)化為Number類型比較

一個Object類型,一個String或Number類型,將Object類型進行原始轉(zhuǎn)換后,按上面流程進行原始值比較

舉一個栗子:
var a = {
  valueOf: function () {
     return1;
  },
  toString: function () {
     return"123"
  }
}
console.log(rue == a) // true;
1. 首先,x與y類型不同,x為boolean類型,則進行ToNumber轉(zhuǎn)換為1,為number類型
2. x為number,y為object類型,對y進行原始轉(zhuǎn)換,ToPrimitive(a, ?),沒有指定轉(zhuǎn)換類型,默認number類型
3. ToPrimitive(a, Number)首先調(diào)用valueOf方法,返回1,得到原始類型1。
4. 1 == 1, 返回true

同理適用于>、<!=、+運算符的隱式轉(zhuǎn)換(但要除去日期對象)

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

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/107384.html

相關(guān)文章

  • JS知識—面試準備(一)

    摘要:使用結(jié)束后會重新壓扁自己,讓自己不是對象。作用用來判斷某個對象是否含有指定的自身屬性語法參數(shù)要檢測的對象要檢測的屬性名稱。但是函數(shù)作用域外部訪問不到函數(shù)內(nèi)部的變量,對象,函數(shù)。 1.JS內(nèi)置類型 分為基本數(shù)據(jù)類型和Object.基本數(shù)據(jù)類型有:null,undefined,string,boolean,number,symbol. console.log(typeof null...

    warkiz 評論0 收藏0
  • JS知識—面試準備(一)

    摘要:使用結(jié)束后會重新壓扁自己,讓自己不是對象。作用用來判斷某個對象是否含有指定的自身屬性語法參數(shù)要檢測的對象要檢測的屬性名稱。但是函數(shù)作用域外部訪問不到函數(shù)內(nèi)部的變量,對象,函數(shù)。 1.JS內(nèi)置類型 分為基本數(shù)據(jù)類型和Object.基本數(shù)據(jù)類型有:null,undefined,string,boolean,number,symbol. console.log(typeof null...

    wapeyang 評論0 收藏0
  • JS知識—面試準備(一)

    摘要:使用結(jié)束后會重新壓扁自己,讓自己不是對象。作用用來判斷某個對象是否含有指定的自身屬性語法參數(shù)要檢測的對象要檢測的屬性名稱。但是函數(shù)作用域外部訪問不到函數(shù)內(nèi)部的變量,對象,函數(shù)。 1.JS內(nèi)置類型 分為基本數(shù)據(jù)類型和Object.基本數(shù)據(jù)類型有:null,undefined,string,boolean,number,symbol. console.log(typeof null...

    zhangrxiang 評論0 收藏0
  • JS基礎(chǔ)】類型轉(zhuǎn)換知多少

    摘要:正確的解釋是允許在相等比較中進行強制類型轉(zhuǎn)換,而不允許。參考資料小議下字符串比較大小中的強制類型轉(zhuǎn)換核心概念類型轉(zhuǎn)換對象和方法隱式類型轉(zhuǎn)換小結(jié) 開胃菜 先說一個題外話,我在工作中遇到一個問題,需要比較 08:00 和 09:00 的大小,最后我找到三種方法: 在兩個字符串前后各拼接相同的年月日和秒,拼成完整的時間格式進行比較: var head = 2016-01-01 var fo...

    AdolphLWQ 評論0 收藏0
  • 原型模式故事鏈(3)--JS數(shù)據(jù)類型、以及區(qū)別、區(qū)分、轉(zhuǎn)化

    摘要:所以不論你媽媽是喊,狗蛋回家吃飯了,還是喊小明回家吃飯了,其實喊的都是你。當然的嘛狗蛋買了件新衣服,小明當然就有這件新衣服了。。。 上一章--原型鏈講解:傳送門:https://segmentfault.com/a/11... 在上一章講解原型鏈時提到了:所有的引用類型都有一個_proto_屬性,稱之為隱式原型。那么引用類型是什么鬼? 盡量簡單的講解一下javascript中的數(shù)據(jù)類...

    stdying 評論0 收藏0

發(fā)表評論

0條評論

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