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

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

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

代碼如下:

3 + true; // 4

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

代碼如下:

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

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

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

代碼如下:

2 + 3; // 5

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

但是,如果字符串和數字相加,會是怎樣的結果呢?JavaScript會自動把數字轉換成字符的,不管數字在前還是字符串在前,如下:

代碼如下:

"2" + 3; // "23"

2 + "3"; // "23"

字符串和數字相加結果是字符串,字符串和數字相加結果是字符串,字符串和數字相加結果是字符串,重要的事情說三遍!!!!!!

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

代碼如下:

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

這與下面是等價的:

代碼如下:

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

相比之下,下面的結果是不一樣的:

代碼如下:

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

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

代碼如下:

var x = NaN;

x === NaN; // false

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

代碼如下:

isNaN("foo"); // true

isNaN(undefined); // true

isNaN({}); // true

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

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

幸運的是,有一種可靠的并且準確的方法可以檢測NaN。我們都知道,只有NaN是自己不等自己的,那么,我們就以使用不等于號(!==)來判斷一個數是否等于自身,從而,可以檢測到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

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

function isReallyNaN(x) {

return x !== x;

}

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

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

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

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

對象轉換成字符串是調用了他的toSting函數的,你可以手動的調用它來檢測一下:

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

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

類似的,對象也是可以轉換成數字的,他是通過valueOf函數的,當然,你也是可以自定義這個valueOf函數的,如下:

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

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

如果,一個對象同時存在valueOf方法和toString方法,那么,valueOf方法總是會被優先調用的,如下:

var obj = {

toString: function() {

return "[object MyObject]";

},

valueOf: function() {

return 17;

}

};

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

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

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

function point(x, y) {

if (!x) {

x = 320;

}

if (!y) {

y = 240;

}

return { x: x, y: y };

}

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

代碼如下:

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

檢測undefined的更加準確的方法是用typeof操作:

function point(x, y) {

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

x = 320;

}

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

y = 240;

}

return { x: x, y: y };

}

這種寫法,可以區分開0和undefined的:

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

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

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

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

總結:

1. 類型錯誤有可能會被類型轉換所隱藏。

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

3. 對象通過valueOf方法,把自己轉換成數字,通過toString方法,把自己轉換成字符串。

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

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

關于JavaScript隱式類型轉換就給大家介紹到這里,希望對大家有所幫助!

更多信息請查看網絡編程
易賢網手機網站地址:JavaScript隱式類型轉換
由于各方面情況的不斷調整與變化,易賢網提供的所有考試信息和咨詢回復僅供參考,敬請考生以權威部門公布的正式信息和咨詢為準!

2026上岸·考公考編培訓報班

  • 報班類型
  • 姓名
  • 手機號
  • 驗證碼
關于我們 | 聯系我們 | 人才招聘 | 網站聲明 | 網站幫助 | 非正式的簡要咨詢 | 簡要咨詢須知 | 新媒體/短視頻平臺 | 手機站點 | 投訴建議
工業和信息化部備案號:滇ICP備2023014141號-1 云南省教育廳備案號:云教ICP備0901021 滇公網安備53010202001879號 人力資源服務許可證:(云)人服證字(2023)第0102001523號
云南網警備案專用圖標
聯系電話:0871-65099533/13759567129 獲取招聘考試信息及咨詢關注公眾號:hfpxwx
咨詢QQ:1093837350(9:00—18:00)版權所有:易賢網
云南網警報警專用圖標
中文字幕免费精品_亚洲视频自拍_亚洲综合国产激情另类一区_色综合咪咪久久
久久xxxx| 香蕉久久一区二区不卡无毒影院 | 午夜亚洲福利在线老司机| aⅴ色国产欧美| 欧美精品在线播放| 亚洲一区综合| 亚洲经典视频在线观看| 国产人成一区二区三区影院| 欧美护士18xxxxhd| 久久国内精品自在自线400部| 亚洲精品一区久久久久久| 国产精品卡一卡二| 欧美韩日一区| 国产视频精品va久久久久久| 正在播放日韩| 亚洲精品乱码| 在线欧美不卡| 国产一区导航| 亚洲一区二区三区免费观看 | 欧美freesex交免费视频| 欧美一区二区在线免费观看| 亚洲午夜免费福利视频| 亚洲国产高潮在线观看| 国产主播在线一区| 国内精品久久久久伊人av| 国产欧美精品国产国产专区| 国产精品爽黄69| 国产精品视频你懂的| 国产精品区一区| 国产色爱av资源综合区| 国产三区精品| 亚洲欧美bt| 久久免费的精品国产v∧| 欧美亚洲专区| 久久久久久久性| 麻豆精品视频| 欧美激情在线观看| 国产精品电影在线观看| 国产欧美一二三区| 亚洲在线观看免费| 国产精品久久久久久久一区探花 | 亚洲主播在线播放| 欧美日韩亚洲高清一区二区| 欧美日韩在线观看一区二区| 欧美网站大全在线观看| 国产精品中文在线| 亚洲欧美日韩一区在线| 免费欧美高清视频| 欧美午夜精品一区| 国产一区在线免费观看| 亚洲区国产区| 欧美一区视频在线| 欧美日韩国产综合网| 99国产精品久久久久久久久久| 亚洲欧美欧美一区二区三区| 欧美一区二区三区视频在线| 国产精品视频精品视频| 久久香蕉精品| 国产精品美女久久福利网站| 在线免费观看日本欧美| 一本色道久久综合一区| 亚洲欧美日韩国产精品| 国产午夜精品一区二区三区视频| 亚洲人精品午夜| 久久成人久久爱| 欧美日韩国产页| 亚洲激情在线视频| 欧美日韩在线观看一区二区| 亚洲国产成人久久综合一区| 欧美在线一二三四区| 在线成人h网| 国产精品久久国产精品99gif| 久久久久久久999精品视频| 国产精品婷婷| 久久综合激情| 激情综合五月天| 午夜久久一区| 国产精品国产三级国产aⅴ入口| 欧美一区二区三区在线| 国产精品毛片高清在线完整版 | 国产精品亚洲综合色区韩国| 久久嫩草精品久久久精品一| 日韩一区二区久久| 欧美不卡视频一区| 亚洲大胆视频| 国产伦精品一区二区三区照片91| 一区二区三区高清不卡| 男男成人高潮片免费网站| 一区二区三区在线免费视频| 欧美日韩中文精品| 欧美激情成人在线| 亚洲欧洲日产国产综合网| 久久久久中文| 午夜精品久久久久久久男人的天堂| 亚洲精品在线一区二区| 影音先锋日韩精品| 女同性一区二区三区人了人一 | 国产日韩欧美精品综合| 国产精品福利在线观看网址| 欧美国产视频一区二区| 亚洲伦理中文字幕| 国产精品大片wwwwww| 亚洲字幕一区二区| 日韩一级免费观看| 日韩视频专区| 国产精品一区二区在线观看网站 | 欧美性猛片xxxx免费看久爱 | 欧美精品在线一区| 在线视频精品一区| 一区二区三区欧美在线| 制服诱惑一区二区| 亚洲综合国产精品| 欧美一区二区三区免费大片| 欧美一级视频精品观看| 亚洲黄色免费电影| 欧美系列亚洲系列| 欧美性猛交xxxx免费看久久久| 欧美在线三区| 久久久久国产免费免费| 日韩午夜av在线| 日韩视频在线免费| 亚洲欧美日韩在线高清直播| 亚洲中字黄色| 久久免费99精品久久久久久| 久久免费视频这里只有精品| 欧美大胆a视频| 久久精品1区| 久久久久久久精| 欧美国产视频在线观看| 欧美日韩亚洲一区在线观看| 久久在线免费观看| 亚洲午夜高清视频| 亚洲电影第1页| 国产精品亚洲综合久久| 国产偷国产偷亚洲高清97cao| 国产主播在线一区| 国产精品日韩电影| 国产综合自拍| 国产视频在线观看一区二区| 亚洲福利在线观看| 精品91免费| 国产精品热久久久久夜色精品三区 | 裸体女人亚洲精品一区| 欧美日韩高清在线| 韩日成人av| 国产麻豆综合| 欧美小视频在线观看| 国产亚洲综合在线| 99亚洲一区二区| 亚洲三级影院| 最新日韩精品| 午夜伦欧美伦电影理论片| 欧美88av| 蘑菇福利视频一区播放| 欧美日韩精品在线观看| 极品少妇一区二区三区精品视频| 国产麻豆日韩| 91久久精品一区二区别| 欧美中文在线观看| 欧美视频一区二区三区| 亚洲人成网在线播放| 久久久免费精品视频| 国产欧美日韩高清| 中日韩午夜理伦电影免费| 欧美国产综合视频| 亚洲电影在线免费观看| 欧美怡红院视频| 国产精品欧美日韩一区二区| 亚洲美女毛片| 欧美激情精品| 最近看过的日韩成人| 久久久精品视频成人| 久久久噜噜噜久久狠狠50岁| 欧美午夜精品一区| 亚洲另类自拍| 欧美精品免费观看二区| 国产精品v欧美精品v日韩| 亚洲欧洲精品一区二区三区| 久久亚洲综合| 在线高清一区| 欧美www视频在线观看| 亚洲激情偷拍| 欧美久久视频| 国产区欧美区日韩区| 午夜日韩福利| 欧美日韩免费观看一区二区三区| 91久久精品一区二区别| 欧美福利一区| 国产精品99久久久久久久久久久久 | 欧美成人免费全部| 亚洲国产精品成人久久综合一区| 麻豆成人在线| 欧美性大战久久久久久久蜜臀| 亚洲人成高清| 国产精品播放| 亚洲国产精品精华液网站| 欧美成人精品h版在线观看| 亚洲精品乱码久久久久久蜜桃麻豆 | 国产精品综合| 欧美中文字幕在线|