中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久

JavaScript隱式類型轉(zhuǎn)換
來源:易賢網(wǎng) 閱讀:930 次 日期:2016-07-20 15:08:01
溫馨提示:易賢網(wǎng)小編為您整理了“JavaScript隱式類型轉(zhuǎn)換”,方便廣大網(wǎng)友查閱!

JavaScript的數(shù)據(jù)類型是非常弱的(不然不會叫它做弱類型語言了)!在使用算術(shù)運算符時,運算符兩邊的數(shù)據(jù)類型可以是任意的,比如,一個字符串可以和數(shù)字相加。之所以不同的數(shù)據(jù)類型之間可以做運算,是因為JavaScript引擎在運算之前會悄悄的把他們進(jìn)行了隱式類型轉(zhuǎn)換的,如下是數(shù)值類型和布爾類型的相加:

代碼如下:

3 + true; // 4

結(jié)果是一個數(shù)值型!如果是在C或者Java環(huán)境的話,上面的運算肯定會因為運算符兩邊的數(shù)據(jù)類型不一致而導(dǎo)致報錯的!但是,在JavaScript中,只有少數(shù)情況下,錯誤類型才會導(dǎo)致出錯,比如調(diào)用非函數(shù),或者讀取null或者undefined的屬性時,如下:

代碼如下:

"hello"(1); // error: not a function

null.x; // error: cannot read property 'x' of null

多數(shù)情況下,JavaScript都不會出錯的,而是自動的進(jìn)行相應(yīng)的類型轉(zhuǎn)換。比如-, *, /,和%等算術(shù)運算符都會把操作數(shù)轉(zhuǎn)換成數(shù)字的,但是“+”號就有點不一樣了,有些情況下,它是算術(shù)加號,有些情況下,是字符串連接符號,具體的要看它的操作數(shù),如下:

代碼如下:

2 + 3; // 5

"hello" + " world"; // "hello world"

但是,如果字符串和數(shù)字相加,會是怎樣的結(jié)果呢?JavaScript會自動把數(shù)字轉(zhuǎn)換成字符的,不管數(shù)字在前還是字符串在前,如下:

代碼如下:

"2" + 3; // "23"

2 + "3"; // "23"

字符串和數(shù)字相加結(jié)果是字符串,字符串和數(shù)字相加結(jié)果是字符串,字符串和數(shù)字相加結(jié)果是字符串,重要的事情說三遍!!!!!!

此外,需要注意的是,“+”的運算方向是從左到右的,如下:

代碼如下:

1 + 2 + "3"; // "33"

這與下面是等價的:

代碼如下:

(1 + 2) + "3"; // "33"

相比之下,下面的結(jié)果是不一樣的:

代碼如下:

1 + "2" + 3; // "123"

但是,隱式類型轉(zhuǎn)換,有時候,會隱藏一些錯誤的,比如,null會轉(zhuǎn)換成0,undefined會轉(zhuǎn)換成NaN。需要注意的是,NaN和NaN是不相等的(這是由于浮點數(shù)的精度決定的),如下:

代碼如下:

var x = NaN;

x === NaN; // false

雖然,JavaScript提供了isNaN來檢測某個值是否為NaN,但是,這也不太精確的,因為,在調(diào)用isNaN函數(shù)之前,本身就存在了一個隱式轉(zhuǎn)換的過程,它會把那些原本不是NaN的值轉(zhuǎn)換成NaN的,如下:

代碼如下:

isNaN("foo"); // true

isNaN(undefined); // true

isNaN({}); // true

isNaN({ valueOf: "foo" }); // true

上面代碼,我們使用isNaN來測試后,發(fā)現(xiàn)字符串,undefined,甚至對象,結(jié)果都返回真!!!但是,我們總不能說他們也是NaN吧?總而言之,得出的結(jié)論是:isNaN檢測NaN并不可靠!!!

幸運的是,有一種可靠的并且準(zhǔn)確的方法可以檢測NaN。我們都知道,只有NaN是自己不等自己的,那么,我們就以使用不等于號(!==)來判斷一個數(shù)是否等于自身,從而,可以檢測到NaN了,如下:

var a = NaN;

a !== a; // true

var b = "foo";

b !== b; // false

var c = undefined;

c !== c; // false

var d = {};

d !== d; // false

var e = { valueOf: "foo" };

e !== e; // false

我們也可以把這種模式定義成一個函數(shù),如下:

function isReallyNaN(x) {

return x !== x;

}

OK,NaN的檢測方法就是這么簡單,我們下面繼續(xù)討論對象的隱式轉(zhuǎn)換!

對象是可以轉(zhuǎn)換成原始值的,最常見的方法就是把它轉(zhuǎn)換成字符串,如下:

"the Math object: " + Math; // "the Math object: [object Math]"

"the JSON object: " + JSON; // "the JSON object: [object JSON]"

對象轉(zhuǎn)換成字符串是調(diào)用了他的toSting函數(shù)的,你可以手動的調(diào)用它來檢測一下:

Math.toString(); // "[object Math]"

JSON.toString(); // "[object JSON]"

類似的,對象也是可以轉(zhuǎn)換成數(shù)字的,他是通過valueOf函數(shù)的,當(dāng)然,你也是可以自定義這個valueOf函數(shù)的,如下:

"J" + { toString: function() { return "S"; } }; // "JS"

2 * { valueOf: function() { return 3; } }; // 6

如果,一個對象同時存在valueOf方法和toString方法,那么,valueOf方法總是會被優(yōu)先調(diào)用的,如下:

var obj = {

toString: function() {

return "[object MyObject]";

},

valueOf: function() {

return 17;

}

};

"object: " + obj; // "object: 17"

但是,多數(shù)情況下,這都不是我們想要的,一般的,盡可能使valueOf和toString表示的值相同(盡管類型可以不同)。

最后一種強(qiáng)制類型轉(zhuǎn)換,我們常常稱之為“真值運算”,比如,if, ||, &&,他們的操作數(shù)不一定是布爾型的額。JavaScript會通過簡單的轉(zhuǎn)換規(guī)則,將一些非布爾類型的值轉(zhuǎn)換成布爾型的。大多數(shù)的值都會轉(zhuǎn)換成true,只有少數(shù)的是false,他們分別是:false, 0, -0, ”", NaN, null, undefined,因為存在數(shù)字和字符串以及對象的值為false,所以,直接用真值轉(zhuǎn)換來判斷一個函數(shù)的參數(shù)是否傳進(jìn)來了,這是不不太安全的。比如,有一個可以具有默認(rèn)值得可選參數(shù)的函數(shù),如下:

function point(x, y) {

if (!x) {

x = 320;

}

if (!y) {

y = 240;

}

return { x: x, y: y };

}

這個函數(shù)會忽略任何的真值為假的參數(shù)的,包括0,-0;

代碼如下:

point(0, 0); // { x: 320, y: 240 }

檢測undefined的更加準(zhǔn)確的方法是用typeof操作:

function point(x, y) {

if (typeof x === "undefined") {

x = 320;

}

if (typeof y === "undefined") {

y = 240;

}

return { x: x, y: y };

}

這種寫法,可以區(qū)分開0和undefined的:

point(); // { x: 320, y: 240 }

point(0, 0); // { x: 0, y: 0 }

另外一種方法是利用參數(shù)跟undefined作比較,如下:

if (x === undefined) { ... }

總結(jié):

1. 類型錯誤有可能會被類型轉(zhuǎn)換所隱藏。

2. “+”既可以表示字符串連接,又可以表示算術(shù)加,這取決于它的操作數(shù),如果有一個為字符串的,那么,就是字符串連接了。

3. 對象通過valueOf方法,把自己轉(zhuǎn)換成數(shù)字,通過toString方法,把自己轉(zhuǎn)換成字符串。

4.具有valueOf方法的對象,應(yīng)該定義一個相應(yīng)的toString方法,用來返回相等的數(shù)字的字符串形式。

5.檢測一些未定義的變量時,應(yīng)該使用typeOf或者與undefined作比較,而不應(yīng)該直接用真值運算。

關(guān)于JavaScript隱式類型轉(zhuǎn)換就給大家介紹到這里,希望對大家有所幫助!

更多信息請查看網(wǎng)絡(luò)編程
易賢網(wǎng)手機(jī)網(wǎng)站地址:JavaScript隱式類型轉(zhuǎn)換
由于各方面情況的不斷調(diào)整與變化,易賢網(wǎng)提供的所有考試信息和咨詢回復(fù)僅供參考,敬請考生以權(quán)威部門公布的正式信息和咨詢?yōu)闇?zhǔn)!

2026上岸·考公考編培訓(xùn)報班

  • 報班類型
  • 姓名
  • 手機(jī)號
  • 驗證碼
關(guān)于我們 | 聯(lián)系我們 | 人才招聘 | 網(wǎng)站聲明 | 網(wǎng)站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機(jī)站點 | 投訴建議
工業(yè)和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網(wǎng)安備53010202001879號 人力資源服務(wù)許可證:(云)人服證字(2023)第0102001523號
云南網(wǎng)警備案專用圖標(biāo)
聯(lián)系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關(guān)注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權(quán)所有:易賢網(wǎng)
云南網(wǎng)警報警專用圖標(biāo)
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
亚洲午夜精品福利| 亚洲精品影视在线观看| 国产欧美成人| 欧美日韩日本网| 欧美jizz19性欧美| 欧美一区午夜精品| 亚洲欧美日韩一区二区在线| 99精品欧美| 日韩一区二区福利| 久久久午夜电影| 久久成人一区| 老司机免费视频久久| 玉米视频成人免费看| 一本色道久久综合狠狠躁篇怎么玩| 欧美大片网址| 久久久亚洲一区| 亚洲欧洲视频在线| 国产日产高清欧美一区二区三区| 欧美日韩午夜激情| 欧美日韩dvd在线观看| 欧美日韩国产欧| 日韩亚洲一区二区| 国产精品久久二区二区| 91久久久久久| 日韩视频一区| 久久精品夜色噜噜亚洲aⅴ| 亚洲人永久免费| 亚洲九九精品| 久久久国产一区二区| 极品尤物一区二区三区| 欧美成人免费一级人片100| 亚洲一区二区高清视频| 久久激情一区| 欧美四级电影网站| 国内久久精品| 欧美一区二区在线观看| 裸体一区二区三区| 性久久久久久久久| 亚洲一区视频| 国产精品日韩在线观看| 亚洲永久在线| 亚洲愉拍自拍另类高清精品| 久久久久久久网站| 欧美午夜无遮挡| 国内精品视频在线播放| 亚洲欧美日本国产专区一区| 国产精品免费小视频| 国产欧美日韩精品一区| 欧美日韩不卡| 国产日韩精品一区二区三区| 久久精品国产亚洲高清剧情介绍| 亚洲高清视频在线| 欧美日韩精品系列| 亚洲国产成人在线视频| 久久精品人人做人人爽| 欧美性事免费在线观看| 美女视频黄免费的久久| 久久在线精品| 美女网站在线免费欧美精品| 美国十次成人| 欧美激情第二页| 欧美国产第一页| 欧美1区视频| 米奇777超碰欧美日韩亚洲| 久久精品夜色噜噜亚洲a∨ | 狠狠色狠狠色综合日日五| 欧美色区777第一页| 国产精品日韩久久久| 激情成人综合| 一二美女精品欧洲| 久久久精品国产免大香伊| 一本大道久久a久久精二百| 亚洲视频免费| 久久久久久久久久久成人| 欧美日韩在线播放三区| 国产在线视频不卡二| 日韩一级二级三级| 久久久久国产一区二区| 欧美日一区二区三区在线观看国产免 | 久久久青草婷婷精品综合日韩 | 免费在线日韩av| 国产精品vvv| 亚洲高清资源| 久久综合狠狠综合久久激情| 国产精品成人国产乱一区| 夜夜精品视频一区二区| 久久亚洲综合| 国产欧美日本一区视频| 一本一本久久| 欧美成人精品在线视频| 国产亚洲成av人在线观看导航| av不卡在线| 欧美精品自拍| 欧美精品二区| 怡红院精品视频| 久久国产精品久久久| 国产精品视频不卡| av成人福利| 欧美体内谢she精2性欧美| 在线看视频不卡| 欧美黑人一区二区三区| 精东粉嫩av免费一区二区三区| 亚洲欧美综合一区| 国产精品jvid在线观看蜜臀| 亚洲国产一区二区精品专区| 亚洲黄色免费网站| 久久精品99| 韩国av一区二区三区四区| 午夜精彩国产免费不卡不顿大片| 欧美日韩综合在线免费观看| 日韩一级欧洲| 欧美午夜激情在线| 欧美午夜不卡在线观看免费| 亚洲精品在线一区二区| 欧美黑人多人双交| 亚洲理论在线| 欧美三日本三级少妇三2023| 99在线热播精品免费| 欧美日韩国产成人在线免费 | 亚洲国产影院| 欧美三级乱人伦电影| 一二三区精品| 国产一区二区精品久久| 久久免费视频在线观看| 亚洲欧洲免费视频| 欧美精品在线免费播放| 亚洲女女做受ⅹxx高潮| 国产亚洲成年网址在线观看| 欧美大片第1页| 一本大道av伊人久久综合| 国产在线精品成人一区二区三区 | 欧美先锋影音| 亚洲影院色无极综合| 伊人影院久久| 欧美日韩精品三区| 久久久综合精品| 亚洲伦理在线| 韩国精品在线观看| 欧美激情一区在线观看| 性色av一区二区三区| 精品电影一区| 国产精品资源| 乱人伦精品视频在线观看| 亚洲一级在线观看| 好吊一区二区三区| 国产精品美女一区二区| 久久精品综合| 亚洲欧美在线一区二区| 亚洲国产精彩中文乱码av在线播放| 国产精品一区二区黑丝| 裸体歌舞表演一区二区| 欧美一区二区三区视频在线| 在线电影国产精品| 国产色综合天天综合网| 欧美高清视频一区二区| 久久精品99国产精品酒店日本| 亚洲日本成人女熟在线观看| 国产一区视频观看| 欧美日韩亚洲网| 欧美激情综合网| 欧美影院成年免费版| 欧美成人在线网站| 亚洲一区3d动漫同人无遮挡| 亚洲人成在线观看| 国产视频精品xxxx| 国产精品私房写真福利视频| 欧美国产免费| 欧美成人有码| 久久都是精品| 欧美一区二区三区四区高清| 日韩亚洲国产精品| 亚洲精品国产精品国产自| 国产性天天综合网| 国产亚洲亚洲| 国产精品美女一区二区在线观看| 欧美日韩国产页| 欧美国产成人在线| 欧美福利电影在线观看| 一本一本a久久| 亚洲亚洲精品三区日韩精品在线视频 | 亚洲视频欧美视频| 国产综合色一区二区三区 | 葵司免费一区二区三区四区五区| 日韩午夜在线电影| 亚洲精品资源美女情侣酒店| 加勒比av一区二区| 在线日韩中文字幕| 韩国福利一区| 亚洲国产高清在线| 尹人成人综合网| 亚洲国产一区二区精品专区| 国产亚洲aⅴaaaaaa毛片| 国内精品一区二区三区| 欧美日本乱大交xxxxx| 亚洲免费观看视频| 亚洲国产成人高清精品| 在线精品一区| 亚洲国产成人久久| 在线精品视频免费观看| 一区二区三区在线观看视频 |