摘要:基本上,只要有一個(gè)字符無法轉(zhuǎn)成數(shù)值,整個(gè)字符串就會(huì)被轉(zhuǎn)為。字符串轉(zhuǎn)換后還是原來的值。布爾值轉(zhuǎn)為字符串,轉(zhuǎn)為字符串。
概述
強(qiáng)制轉(zhuǎn)換
Number()先v+nuber否則后t
String()先t加st是否原始值后v
Boolean(
Valueof返回本身
Tostringg 對(duì)象的話返object object 字符串
自動(dòng)轉(zhuǎn)換
自動(dòng)轉(zhuǎn)換為布爾值
自動(dòng)轉(zhuǎn)換為字符串
自動(dòng)轉(zhuǎn)換為數(shù)值
參考鏈接
1.強(qiáng)制轉(zhuǎn)換
2.Number()
2.1字符串:
(1)空 0(2)123 123(3)12aa NaN
2.2Nulll 0
2.3UUndefined null
2.4ture1 false 0
// 數(shù)值:轉(zhuǎn)換后還是原來的值
Number(324) // 324
// 字符串:如果可以被解析為數(shù)值,則轉(zhuǎn)換為相應(yīng)的數(shù)值
Number("324") // 324
// 字符串:如果不可以被解析為數(shù)值,返回 NaN
Number("324abc") // NaN
// 空字符串轉(zhuǎn)為0
Number("") // 0
// 布爾值:true 轉(zhuǎn)成 1,false 轉(zhuǎn)成 0
Number(true) // 1
Number(false) // 0
// undefined:轉(zhuǎn)成 NaN
Number(undefined) // NaN
// null:轉(zhuǎn)成0
Number(null) // 0
2.5parseInt函數(shù)嚴(yán)格很多。基本上,只要有一個(gè)字符無法轉(zhuǎn)成數(shù)值,整個(gè)字符串就會(huì)被轉(zhuǎn)為NaN。
parseInt("42 cats") // 42
Number("42 cats") // NaN
2.6另外,parseInt和Number函數(shù)都會(huì)自動(dòng)過濾一個(gè)字符串前導(dǎo)和后綴的空格。
parseInt("tvr12.34n") // 12
Number("tvr12.34n") // 12.34
2.7(2)對(duì)象
簡(jiǎn)單的規(guī)則是,Number方法的參數(shù)是對(duì)象時(shí),將返回NaN,除非是包含單個(gè)數(shù)值的數(shù)組。
Number({a: 1}) // NaN
Number([1, 2, 3]) // NaN
Number([5]) // 5
先valueof判斷是否對(duì)象再tostring判斷是否對(duì)象用number
第一步,調(diào)用對(duì)象自身的valueOf方法。如果返回原始類型的值,則直接對(duì)該值使用Number函數(shù),不再進(jìn)行后續(xù)步驟。
第二步,如果valueOf方法返回的還是對(duì)象,則改為調(diào)用對(duì)象自身的toString方法。如果toString方法返回原始類型的值,則對(duì)該值使用Number函數(shù),不再進(jìn)行后續(xù)步驟。
第三步,如果toString方法返回的是對(duì)象,就報(bào)錯(cuò)。
var obj = {x: 1};
Number(obj) // NaN
// 等同于
if (typeof obj.valueOf() === "object") {
Number(obj.toString());
} else {
Number(obj.valueOf());
}
上面代碼中,Number函數(shù)將obj對(duì)象轉(zhuǎn)為數(shù)值。背后發(fā)生了一連串的操作,首先調(diào)用obj.valueOf方法, 結(jié)果返回對(duì)象本身;于是,繼續(xù)調(diào)用obj.toString方法,這時(shí)返回字符串[object Object],對(duì)這個(gè)字符串使用Number函數(shù),得到NaN。
默認(rèn)情況下,對(duì)象的valueOf方法返回對(duì)象本身,所以一般總是會(huì)調(diào)用toString方法,而toString方法返回對(duì)象的類型字符串(比如[object Object])。所以,會(huì)有下面的結(jié)果。
Number({}) // NaN
如果toString方法返回的不是原始類型的值,結(jié)果就會(huì)報(bào)錯(cuò)。
var obj = {
valueOf: function () {
return {};
},
toString: function () {
return {};
}
};
Number(obj)
// TypeError: Cannot convert object to primitive value
上面代碼的valueOf和toString方法,返回的都是對(duì)象,所以轉(zhuǎn)成數(shù)值時(shí)會(huì)報(bào)錯(cuò)。
從上例還可以看到,valueOf和toString方法,都是可以自定義的。
Number({
valueOf: function () {
return 2;
}
})
// 2
Number({
toString: function () {
return 3;
}
})
// 3
Number({
valueOf: function () {
return 2;
},
toString: function () {
return 3;
}
})
// 2
上面代碼對(duì)三個(gè)對(duì)象使用Number函數(shù)。第一個(gè)對(duì)象返回valueOf方法的值,第二個(gè)對(duì)象返回toString方法的值,第三個(gè)對(duì)象表示valueOf方法先于toString方法執(zhí)行。
3.String()
(1)原始類型值
數(shù)值:轉(zhuǎn)為相應(yīng)的字符串。
字符串:轉(zhuǎn)換后還是原來的值。
布爾值:true轉(zhuǎn)為字符串"true",false轉(zhuǎn)為字符串"false"。
undefined:轉(zhuǎn)為字符串"undefined"。
null:轉(zhuǎn)為字符串"null"。
String(123) // "123"
String("abc") // "abc"
String(true) // "true"
String(undefined) // "undefined"
String(null) // "null"
(2)String方法的參數(shù)如果是對(duì)象,返回一個(gè)類型字符串;如果是數(shù)組,返回該數(shù)組的字符串形式。
String({a: 1}) // "[object Object]"
String([1, 2, 3]) // "1,2,3"
2.1String方法背后的轉(zhuǎn)換規(guī)則,與Number方法基本相同,只是互換了valueOf方法和toString方法的執(zhí)行順序。
先調(diào)用對(duì)象自身的toString方法。如果返回原始類型的值,則對(duì)該值使用String函數(shù),不再進(jìn)行以下步驟。
如果toString方法返回的是對(duì)象,再調(diào)用原對(duì)象的valueOf方法。如果valueOf方法返回原始類型的值,則對(duì)該值使用String函數(shù),不再進(jìn)行以下步驟。
如果valueOf方法返回的是對(duì)象,就報(bào)錯(cuò)。
如果toString法和valueOf方法,返回的都是對(duì)象,就會(huì)報(bào)錯(cuò)。
var obj = {
valueOf: function () {
return {};
},
toString: function () {
return {};
}
};
String(obj)
// TypeError: Cannot convert object to primitive value
下面是一個(gè)例子。
String({a: 1})
// "[object Object]"
// 等同于
String({a: 1}.toString())
// "[object Object]"
上面代碼先調(diào)用對(duì)象的toString方法,發(fā)現(xiàn)返回的是字符串[object Object],就不再調(diào)用valueOf方法了
下面是通過自定義toString方法,改變返回值的例子。
String({
toString: function () {
return 3;
}
})
// "3"
String({
valueOf: function () {
return 2;
}
})
// "[object Object]"
String({
valueOf: function () {
return 2;
},
toString: function () {
return 3;
}
})
// "3"
上面代碼對(duì)三個(gè)對(duì)象使用String函數(shù)。第一個(gè)對(duì)象返回toString方法的值(數(shù)值3),第二個(gè)對(duì)象返回的還是toString方法的值([object Object]),第三個(gè)對(duì)象表示toString方法先于valueOf方法執(zhí)行
4.Boolean()
它的轉(zhuǎn)換規(guī)則相對(duì)簡(jiǎn)單:除了以下五個(gè)值的轉(zhuǎn)換結(jié)果為false,其他的值全部為true。
undefined
null
0(包含-0和+0)
NaN
""(空字符串
Boolean(true) // true
Boolean(false) // false
4.1注意,所有對(duì)象(包括空對(duì)象)的轉(zhuǎn)換結(jié)果都是true,甚至連false對(duì)應(yīng)的布爾對(duì)象new Boolean({}) // true
Boolean([]) // true
Boolean(new Boolean(false)) // true
5.自動(dòng)轉(zhuǎn)換
加法 字符串
If 布爾
一元 和減法 數(shù)值
{foo: "bar"} // NaN
[1, 2, 3] // NaN
全部使用Boolean、Number和String函數(shù)進(jìn)行顯式轉(zhuǎn)換
6.自動(dòng)轉(zhuǎn)換為布爾值
7.自動(dòng)轉(zhuǎn)換為字符串
加法
"5" + 1 // "51"
"5" + true // "5true"
"5" + false // "5false"
"5" + {} // "5[object Object]"
"5" + [] // "5"
"5" + function (){} // "5function (){}"
"5" + undefined // "5undefined"
"5" + null // "5null"
8.自動(dòng)轉(zhuǎn)換為數(shù)值
除了加法,
其他運(yùn)算符都會(huì)把運(yùn)算子自動(dòng)轉(zhuǎn)成數(shù)值。
"5" - "2" // 3
"5" * "2" // 10
true - 1 // 0
false - 1 // -1
"1" - 1 // 0
"5" * [] // 0
false / "5" // 0
"abc" - 1 // NaN
null + 1 // 1
undefined + 1 // NaN
+"abc" // NaN
-"abc" // NaN
+true // 1
-false // 0
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/105986.html
摘要:如果給定的一個(gè)數(shù)超出了的范圍,將會(huì)被解釋為。從布爾值轉(zhuǎn)換將產(chǎn)生出零,將產(chǎn)生出壹。由于內(nèi)部表達(dá)方式的原因,比較兩個(gè)浮點(diǎn)數(shù)是否相等是有問題的。和在小數(shù)點(diǎn)后五位精度內(nèi)都是相等的。這里共有兩種語法規(guī)則一種簡(jiǎn)單規(guī)則,一種復(fù)雜規(guī)則。 前言 搬運(yùn):PHP官方文檔 四種標(biāo)量類型 boolean(布爾型) 這是最簡(jiǎn)單的類型。boolean表達(dá)了真值,可以為TRUE或FLASE。要指定一個(gè)布爾值,使用關(guān)...
摘要:隱式數(shù)據(jù)類型轉(zhuǎn)換轉(zhuǎn)換成類型字符串用法空字符串變量名稱啊哈哈轉(zhuǎn)換成字符串?dāng)?shù)字類型和布爾類型轉(zhuǎn)換會(huì)將其值用字符串的方式顯示數(shù)字類型轉(zhuǎn)換成字符串類型顯示顯示轉(zhuǎn)換后的類型布爾類型轉(zhuǎn)換成字符串類型顯示顯示轉(zhuǎn)換后的類型轉(zhuǎn)換成類型數(shù)字用法加號(hào)變 隱式數(shù)據(jù)類型轉(zhuǎn)換 轉(zhuǎn)換成string類型(字符串) - 用法( - 空字符串) + 變量名稱 var num = 100; var str1 = 啊哈哈; ...
摘要:獲取變量的類型,使用函數(shù)。要檢驗(yàn)?zāi)硞€(gè)類型,可以使用函數(shù),如是在整形是在浮點(diǎn)型是在字符串如果需要將一個(gè)變量強(qiáng)制轉(zhuǎn)換為某類型,可以對(duì)其使用強(qiáng)制轉(zhuǎn)換或者函數(shù)。自起,此限制僅對(duì)包含變量時(shí)有效。 簡(jiǎn)介 PHP支持9種原始數(shù)據(jù)類型。 4種標(biāo)量類型: boolean布爾型 integer 整形 float 浮點(diǎn)型(也稱作double) string 字符串 3種復(fù)合類型: array...
摘要:目錄語句變量小結(jié)基本語法一是核心知識(shí)點(diǎn)的基本語法的第一部分,主要介紹了語句表達(dá)式變量和數(shù)據(jù)類型不包括函數(shù)類型的基本知識(shí)點(diǎn),函數(shù)類型將在下一章函數(shù)二中詳細(xì)探討語句程序的執(zhí)行是由一條條語句組成的每一條語句是為完成特定任務(wù)而執(zhí)行的操作語句當(dāng)中可以 目錄 1. 語句 2. 變量 3. 小結(jié) JavaScript基本語法(一)是JavaScript核心知識(shí)點(diǎn)(ECMAScript)的基本語法的...
摘要:語法常量名值常量名在程序中,通常采用大寫形式。結(jié)果為類型作用表示使用的數(shù)據(jù)不存在類型只有一個(gè)值即當(dāng)聲明的變量未賦值未初始化時(shí),該變量的默認(rèn)值就是類型用于表示不存在的對(duì)象。結(jié)果為按位或,對(duì)小數(shù)取整將任意小數(shù)與做按位或,結(jié)果則取整數(shù)部分。 前端知識(shí)點(diǎn)總結(jié)——JS基礎(chǔ) 1.javascript概述(了解) 1.什么是javascript javascript簡(jiǎn)稱為js,是一種運(yùn)行于js解釋器...
閱讀 383·2023-04-25 16:38
閱讀 1497·2021-09-26 09:46
閱讀 3343·2021-09-08 09:35
閱讀 2793·2019-08-30 12:54
閱讀 3260·2019-08-29 17:06
閱讀 1032·2019-08-29 14:06
閱讀 3356·2019-08-29 13:00
閱讀 3473·2019-08-28 17:53