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

資訊專欄INFORMATION COLUMN

Javascript基礎(chǔ)之-強(qiáng)制類型轉(zhuǎn)換(二)

kk_miles / 2586人閱讀

摘要:所以無論還是都會(huì)進(jìn)行類型轉(zhuǎn)換,唯一的區(qū)別,就是會(huì)置否而不會(huì)。這時(shí)候,肯定會(huì)有人問,假如說我有其他的數(shù)據(jù)類型呢,又不是數(shù)字又不是字符串,比如說數(shù)組啊,對(duì)象啊,布爾值啥的,那么如果是引用數(shù)據(jù)類型,則先轉(zhuǎn)為基本數(shù)據(jù)類型,再進(jìn)行比較。

上一章主要講了轉(zhuǎn)換到數(shù)字,字符串和布爾類型的一些知識(shí)點(diǎn),那么這一講接著上面的繼續(xù)講。

思考下面這個(gè)問題:

console.log(+"123");  // 123
console.log(-"123");  // -123
console.log(+"abc");  // NaN
console.log(-"abc");  // NaN

+這個(gè)很容易理解,就是把字符串轉(zhuǎn)成了數(shù)字,而-這個(gè)呢,除了把字符串轉(zhuǎn)為數(shù)字以外,還會(huì)吧這個(gè)數(shù)字加否。所以無論+還是-都會(huì)進(jìn)行類型轉(zhuǎn)換,唯一的區(qū)別,就是-會(huì)置否而+不會(huì)。

那么+除了當(dāng)作一元運(yùn)算符外,還有一個(gè)更廣為人知的就是作為加法運(yùn)算符。

那么加法運(yùn)算符的話,實(shí)際上是有兩種可能性的,一種是字符串的拼接,另一種就是做運(yùn)算。接下來咱們就對(duì)這方面詳細(xì)的講解一下。

先說結(jié)論,如果在+的其中有一個(gè)操作數(shù)是字符串或者可以轉(zhuǎn)為字符串的話,那么就進(jìn)行字符串拼接。

反之,如果倆都是數(shù)字的話,則進(jìn)行加法運(yùn)算。

這時(shí)候,肯定會(huì)有人問,假如說我有其他的數(shù)據(jù)類型呢,又不是數(shù)字又不是字符串,比如說數(shù)組啊,對(duì)象啊,布爾值啥的,

那么如果是引用數(shù)據(jù)類型,則先轉(zhuǎn)為基本數(shù)據(jù)類型,再進(jìn)行比較。

如果是布爾呢,如果加法的另一邊是數(shù)字的話,那么他就會(huì)轉(zhuǎn)為數(shù)字,如果是字符串的話,就直接拼接啦.

上面說了一大堆的理論的東西,想必大家看著也累了。來上例子。

console.log(true + 11);  // 12
console.log(true + false);  // 1
console.log(true + "11");   // "true11"

這個(gè)很明顯可以看出,如果操作數(shù)是數(shù)字的話,或者說,操作數(shù)都是字符串的話,那么布爾值會(huì)先轉(zhuǎn)為數(shù)字,再進(jìn)行拼接操作,如果有一個(gè)操作數(shù)是字符串的話,那就不轉(zhuǎn)啦,直接拼接。

那么如果是對(duì)象類型,它是先轉(zhuǎn)為基本數(shù)據(jù)類型,怎么轉(zhuǎn)呢,其實(shí)就是先調(diào)用valueOf,如果valueOf不存在,或者返回的不是基本數(shù)據(jù)類型,就調(diào)用toString,如果toString也沒有或者是返回的不是基本數(shù)據(jù)類型呢,那估計(jì)就直接報(bào)錯(cuò)了,看例子。

var obj = {
  valueOf() {
    return [2, 3];
  },
  toString() {
    return "sss";
  }
}
var obj1 = {
  valueOf() {
    return 111;
  },
  toString() {
    return "abc";
  }
}
var obj2 = {
  valueOf() {
    return [];
  },
  toString() {
    return {
      abc: "liuhaitao",
    }
  }
}
console.log(obj + 1); // "sss1"
console.log(obj1 + 1);  // 112
console.log(obj2 + 1);  // "Cannot convert object to primitive value"


那么下面一個(gè)例子就很容易理解了。

console.log([1].valueOf());  // [1]
console.log([1] + [2]);  // 12

因?yàn)閿?shù)組的valueOf的值依然為數(shù)組,所以他們轉(zhuǎn)的時(shí)候,就會(huì)調(diào)用toString,所以就轉(zhuǎn)成了字符串啦,倆字符串進(jìn)行拼接,得到最終結(jié)果

減法運(yùn)算符(-)

很顯然,減法運(yùn)算符就是做減法的,他很單純,就只是做減法,但是呢,這個(gè)有一個(gè)知識(shí)點(diǎn),就是,減法里的操作數(shù),如果不是數(shù)字的話,那么會(huì)先轉(zhuǎn)為數(shù)字類型的。

console.log("123" - 0);  // 123
console.log([3] - [1]);  // 2
console.log({valueOf() { return 3}} - {valueOf() { return 2}});  // 1

這個(gè)很明顯,第一個(gè)和第二個(gè)的結(jié)果都是轉(zhuǎn)為了數(shù)字再進(jìn)行運(yùn)算的,那第三個(gè)呢,其實(shí)這個(gè)就是對(duì)象的轉(zhuǎn)化方式,如果有valueOf的話,會(huì)先執(zhí)行valueOf找出基本類型值,沒有或者不是基本類型值就找toString,最后呢,吧基本類型值轉(zhuǎn)為數(shù)字再進(jìn)行減法運(yùn)算 。

好了,加法和減法都說完了,那么乘法和除法呢,其實(shí)和減法類似,都是轉(zhuǎn)為數(shù)字這樣的。

console.log("123" * 0);  // 0
console.log([3] * [1]);  // 3
console.log({valueOf() { return 3}} * {valueOf() { return 2}});  // 6

想看乘法和除法其他的細(xì)節(jié)和本文關(guān)系不是太大,所以就不細(xì)講了,詳情請(qǐng)查閱文檔ecma文檔:

https://www.ecma-internationa...

https://www.ecma-internationa...

還有本節(jié)最后一部分,就是有關(guān)于邏輯與(&&)和邏輯或(||)

為啥要特地介紹他倆呢,因?yàn)樗麄z的語法和其他語言的語法特性似乎有那么一些區(qū)別。來看代碼

var a = 42;
var b = "abc";
var c = null;
console.log(a || b);  // 42
console.log(a && b);  // "abc"
console.log(c || b);  // "abc"
console.log(c && b);  // null

這一塊可以看出,他和其他語言的不同之處在于,他的運(yùn)算的結(jié)果,并不是true和false,而是具體的值,也就是說

||符號(hào)的時(shí)候,如果第一個(gè)操作數(shù)是true,則返回第一個(gè)操作數(shù),如果是false返回第二個(gè),

&&相反,如果第一個(gè)操作數(shù)是true,則返回第二個(gè)操作數(shù),如果是false則返回第一個(gè)。

那這個(gè)有啥用呢?

其實(shí)可以利用這個(gè)的特性簡化我們的代碼,比如說

function exec () {
  console.log("exec");
}
true && exec();  // exec
var a = undefined;
var b = a || 10;
console.log(b);  // 10

這個(gè)代表了應(yīng)用的兩個(gè)方面,&&可以做函數(shù)執(zhí)行的前置判斷,后面那個(gè)呢,可以做缺省時(shí)的默認(rèn)值,你可以仔細(xì)觀察一下,在一些壓縮代碼工具,壓縮完后的代碼,很多都把if 條件判斷改成了&&,這次知道原因了吧。

參考書籍《你不知道的Javascript中卷》

參考文章:https://codeburst.io/javascri...

本文轉(zhuǎn)載自http://www.lht.ren/article/6/

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

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

相關(guān)文章

  • JavaScript 需要檢查變量類型

    摘要:一返回值調(diào)用外部方法獲取的值需要對(duì)類型做判斷,因?yàn)槲覀儗?duì)方法返回的值是有期望值類型,但是卻不能保證這個(gè)接口返回的值一直是同一個(gè)類型。 19年目標(biāo):消滅英語!我新開了一個(gè)公眾號(hào)記錄一個(gè)程序員學(xué)英語的歷程 有提升英語訴求的小伙伴可以關(guān)注公眾號(hào):csenglish 程序員學(xué)英語,每天花10分鐘交作業(yè),跟我一起學(xué)英語吧 javascript作為一門動(dòng)態(tài)類型語言,具有很高的動(dòng)態(tài)靈活性,當(dāng)定義函數(shù)...

    Songlcy 評(píng)論0 收藏0
  • Javascript基礎(chǔ)-強(qiáng)制類型轉(zhuǎn)換(三)

    摘要:抽象相等和嚴(yán)格相等。首先,也是如果有對(duì)象的話,會(huì)把對(duì)象轉(zhuǎn)為基本類型值,在進(jìn)行比較。 這一節(jié),應(yīng)該算是強(qiáng)制類型轉(zhuǎn)換的最后一個(gè)小節(jié)了,這一部分呢,主要會(huì)講比較操作中遇到的強(qiáng)制類型轉(zhuǎn)換。 抽象相等(==)和嚴(yán)格相等(===)。 簡單且粗略的來說,抽象相等和嚴(yán)格相等的區(qū)別就是抽象相等在比較的時(shí)候,如果比較的兩個(gè)數(shù)類型不同,會(huì)先進(jìn)行類型轉(zhuǎn)換再比較,而嚴(yán)格類型呢,比較簡單粗暴一些,直接返回fals...

    GeekGhc 評(píng)論0 收藏0
  • Javascript基礎(chǔ)-強(qiáng)制類型轉(zhuǎn)換(一)

    摘要:轉(zhuǎn)換為字符串規(guī)則如下圖代碼大致就是普通其他基本類型轉(zhuǎn)為字符串的話,就直接轉(zhuǎn)為其值的字符串表達(dá)形式,如果是基本類型的封裝對(duì)象,會(huì)先拆封,然后再轉(zhuǎn)為字符串,如果是普通對(duì)象,則會(huì)調(diào)用其內(nèi)部的值,如果是極大數(shù)和級(jí)小數(shù),將會(huì)進(jìn)行一些轉(zhuǎn)化,具體規(guī) 轉(zhuǎn)換為字符串規(guī)則如下圖代碼: console.log(String(undefined)); // undefined console.log(Str...

    leon 評(píng)論0 收藏0
  • JavaScript學(xué)習(xí)總結(jié)(一)基礎(chǔ)部分

    摘要:前綴規(guī)范每個(gè)局部變量都需要有一個(gè)類型前綴,按照類型可以分為表示字符串。例如,表示以上未涉及到的其他對(duì)象,例如,表示全局變量,例如,是一種區(qū)分大小寫的語言。布爾值與字符串相加將布爾值強(qiáng)制轉(zhuǎn)換為字符串。 基本概念 javascript是一門解釋型的語言,瀏覽器充當(dāng)解釋器。js執(zhí)行時(shí),在同一個(gè)作用域內(nèi)是先解釋再執(zhí)行。解釋的時(shí)候會(huì)編譯function和var這兩個(gè)關(guān)鍵詞定義的變量,編譯完成后從...

    AlanKeene 評(píng)論0 收藏0
  • 進(jìn)擊的 JavaScript(一) 類型轉(zhuǎn)換

    摘要:實(shí)際上,我們通常認(rèn)為是自有類型的唯一成員。比較運(yùn)算符的操作數(shù)可能是任意類型。結(jié)果只有,例得到操作值等價(jià)的布爾值真值為,假值為等同于,經(jīng)常稱為強(qiáng)制轉(zhuǎn)換。結(jié)果返回布爾值的用法是中唯一一個(gè)不等于任何值的包括它自己。 說起 js 類型轉(zhuǎn)換,都是頭疼吧,暈暈的,但是不行啊,這東西很重要滴! 基礎(chǔ)知識(shí) JavaScript的數(shù)據(jù)類型分為六種,分別為null, undefined, boolean,...

    Scholer 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<