JS第二天

對象到其他類型之間的數(shù)據(jù)轉(zhuǎn)換

對象到boolean

  • 非空對象 是true
  • 空對象(是null门驾,不是{}) false

對象到字符串

  • 調(diào)用對象的toString方法实夹。
    String(o);//String()調(diào)用o的toString();
    o.toString();//o調(diào)用自身的toString()方法

對象到number

  • 使用Number()轉(zhuǎn)換
  • 如果對象既沒有重寫toString()方法鸳碧,也沒有重寫valueOf()的猛,返回NaN
    var o = {
    name : "briup",
    age :22
    };
    Number(o); // NaN
  • 如果對象只重寫了toString()方法颓帝,沒有重寫valueOf()方法脓恕,將獲
    取到toString()返回的值驯杜,然后對該值進(jìn)行轉(zhuǎn)換
    var o = {
    name : "briup",
    age :22,
    toString:function(){
    return "1";
    }
    };
    Number(o);
    // 默認(rèn)轉(zhuǎn)換o.toString(),既Number("1"),結(jié)果為 1
  • 如果對象既重寫了toString()方法受啥,也重寫了valueOf()方法,或者僅
    重寫了valueOf()方法鸽心,將調(diào)用valueOf(),并且取得返回值滚局,對該返回
    值進(jìn)行轉(zhuǎn)換
    var o = {
    name : "briup",
    age :22,
    toString:function(){
    return "1";
    },
    valueOf:function(){
    return false;
    }
    };
    Number(o); // 默認(rèn)轉(zhuǎn)換o.valueOf(),既Number(false),結(jié)果為 0
  • parseInt()/parseFloat()
    始終調(diào)用toString()將其返回值進(jìn)行parseInt()轉(zhuǎn)換

操作符

一元操作符

++,--,+,-操作符應(yīng)用任何類型數(shù)值都返回一個(gè)數(shù)值類型顽频,先將任意類型的值轉(zhuǎn)換為Number
然后進(jìn)行運(yùn)算

遞增 ++

  • 前置:操作該變量之前進(jìn)行遞增或者遞減操作
  • 后置:操作該變量之后進(jìn)行遞增或者遞減操作

對任意數(shù)據(jù)類型的操作數(shù)都適用藤肢,使用前先將其轉(zhuǎn)換為數(shù)字(Number()),然后再進(jìn)行運(yùn)算

在應(yīng)用于對象的時(shí)候糯景,優(yōu)先先調(diào)用對象的valueOf方法嘁圈,以取得一個(gè)可供操作的值,如果子類
對象僅重寫了toString(),調(diào)用該方法。

遞減 --

  • 前置:操作該變量之前進(jìn)行遞增或者遞減操作

  • 后置:操作該變量之后進(jìn)行遞增或者遞減操作

    對任意數(shù)據(jù)類型的操作數(shù)都適用蟀淮,使用前先將其轉(zhuǎn)換為數(shù)字最住,然后再進(jìn)行運(yùn)算

    在應(yīng)用于對象的時(shí)候,先調(diào)用對象的valueOf方法怠惶,以取得一個(gè)可供操作的值,如果子類
    對象僅重寫了toString(),調(diào)用該方法涨缚。

加 +

    相當(dāng)于調(diào)用Number();
var a = "12"
+a ;    // 12  相當(dāng)于調(diào)用了Number("12")

減 -

    將一元減應(yīng)用于數(shù)值時(shí),數(shù)值會變成負(fù)數(shù)策治。
    將一元減應(yīng)用于非數(shù)值時(shí)脓魏,
遵循與一元加操作符相同的規(guī)則兰吟,最后將得到的數(shù)值轉(zhuǎn)化為負(fù)數(shù)

布爾操作符, 非(NOT),與(and)茂翔,或(OR)

邏輯非 !

    該操作符應(yīng)用任何類型數(shù)值都返回一個(gè)布爾值混蔼。先將任意類型的數(shù)值轉(zhuǎn)換為Boolean,
然后取反珊燎,!a ==> !Number(a)
    !0    //true
!""    //true    
!NaN    //true    
!false    //true
   連用兩次邏輯非 惭嚣,就可以將任意數(shù)據(jù)類型轉(zhuǎn)化為Boolean類型,!!a ==> Number(a)
    !!""    //false

邏輯與 && (同真才真俐末,有假則假)

短路
可應(yīng)用于任意數(shù)值料按。如果有一個(gè)操作數(shù)不是布爾類型,邏輯與就不一定返回boolean類型

  • 如果第一個(gè)操作數(shù)是
    null,NaN,undefined,false,0,""可被轉(zhuǎn)換
    為false的值的時(shí)候返回該值

  • 如果第一個(gè)數(shù)其他卓箫,返回第二個(gè)數(shù)

      var s1 = 8;
      var s2 = "briup";
      var s3 = "";
      var result = s1 && s2;    //briup
      var result2 = s3 &&s2;  //空字符串
    

邏輯或 ||(有真則真载矿,同假才假)

false ||
如果兩個(gè)操作數(shù)都是null,NaN,undefined,false,0,""可被轉(zhuǎn)換為false的值的時(shí)候返回該值
如果第一個(gè)操作數(shù)是null,NaN,undefined,false,0,"" 則返回第二個(gè)操作數(shù)

加性操作符

加法 +

    m + n
  • 當(dāng)m,n不為String,Object類型的時(shí)候,先將m,n轉(zhuǎn)換為Number類型烹卒,然后再進(jìn)行計(jì)算

      true + false;      //1闷盔;Number(true)+Number(false);
      true + 1;      //2;Number(true) + 1
      null + undefined; //NaN旅急;Number(undefined) -> NaN
    
  • 當(dāng)m,n有一個(gè)為String,無論另一個(gè)操作數(shù)為何(但不為對象)都要轉(zhuǎn)換為String逢勾,然后再進(jìn)行拼接

      "1" + true;    // 1true
      "1" + undefined;// 1undefined
      "1" + 1;    // 11
    
  • 當(dāng)m,n 有一個(gè)為對象,如果該對象既重寫toString,又重寫了valueOf方法藐吮,調(diào)用valueOf方法獲取返回值溺拱,
    將該返回值和另外一個(gè)操作數(shù)進(jìn)行運(yùn)算。如果該對象沒有重寫valueOf方法谣辞,將調(diào)用toString方法獲取返回值迫摔,
    將該返回值和另外一個(gè)操作數(shù)進(jìn)行運(yùn)算。
    var o = {
    name:"briup",
    valueOf:function(){
    return "1";
    }
    }
    o+1; //2泥从;o+1

減法 -

返回值為Number

無論操作數(shù)為任何類型句占,先將其使用Number()轉(zhuǎn)換器轉(zhuǎn)換為Number類型,然后再計(jì)算躯嫉。

    true - 1;    //0;    1-1
    null - true;    //-1 ;    0-1
    1 - undefined    //NaN
    var o = {
        name:"briup",
        valueOf:function(){
        return 1;
        }
    }
    o-1;        //0;    1-1

乘性操作符

當(dāng)操作數(shù)為非數(shù)值的時(shí)候執(zhí)行自動的類型轉(zhuǎn)化Number()

乘法 *

  • 如果兩個(gè)數(shù)都是數(shù)值纱烘,執(zhí)行常規(guī)的乘法計(jì)算
  • 如果一個(gè)操作數(shù)是NaN,結(jié)果為NaN
    超過數(shù)值范圍返回Infinity(Infinity 屬性用于存
    放表示正無窮大的數(shù)值。
  • 如果有一個(gè)操作數(shù)不是數(shù)值祈餐,則在后臺先調(diào)用Number()將其轉(zhuǎn)換為數(shù)值擂啥。

除法 /

  • 如果一個(gè)操作數(shù)是NaN,結(jié)果為NaN (0/0 ; NaN)
    一個(gè)非0值除0 Infinity

  • 如果有一個(gè)操作數(shù)不是數(shù)值,則在后臺先
    調(diào)用Number()將其轉(zhuǎn)換為數(shù)值帆阳。

          var s1 = 5;
          var s2 = 2;
          var result = s1/s2;  //2.5
    

取余 %

  • 如果兩個(gè)數(shù)都是數(shù)值啤它,執(zhí)行常規(guī)的取余計(jì)算
  • 如果一個(gè)操作數(shù)是NaN,結(jié)果為NaN(任意數(shù)%0 ; NaN)
  • 如果有一個(gè)操作數(shù)不是數(shù)值,則在后臺先調(diào)用Number()將其轉(zhuǎn)換為數(shù)值。

關(guān)系操作符

< > <= >= ,返回一個(gè)boolean值

  • 如果兩個(gè)操作數(shù)是字符串变骡,比較字符串中對應(yīng)位置的每個(gè)字符的字符編碼值

    a -> z
    "10" -> "9"
      "a">"b"    //false
      "1">"a"    //false
    
  • 如果一個(gè)操作數(shù)是數(shù)值,將另外一個(gè)操作數(shù)也轉(zhuǎn)換為數(shù)值進(jìn)行比較

      "3">1;        //true
      3>true;        //true 3>Number(true)
      3>undefined;    //false Number(undefined)=NaN ;任何數(shù)和NaN比較結(jié)果都為false
    
  • 如果一個(gè)操作數(shù)是對象芭逝,先調(diào)用valueOf(),再調(diào)用toString()將返回值與另外一個(gè)操作數(shù)比較
    如果沒有重寫toString() valueOf()則始終為false

      var o = {
          name:"briup",
          valueOf:function(){
          return "13";
          }
      }
      o>2        // true ; "13">2
    

相等操作符

相等和不相等 ==, != (先轉(zhuǎn)換在比較)

  • 如果有一個(gè)數(shù)為boolean類型塌碌,比較前先轉(zhuǎn)換為數(shù)值。
  • 如果一個(gè)數(shù)為字符串旬盯,另外一個(gè)數(shù)為數(shù)值台妆,比較前先將字符串轉(zhuǎn)換為數(shù)值
  • 如果兩個(gè)都是字符串,比較字符序列
  • 如果一個(gè)數(shù)是對象胖翰,另外一個(gè)數(shù)不是接剩,則調(diào)用valuesOf()方法,用得到的基本數(shù)據(jù)類型進(jìn)行比較
    null == undefined //true
  • 如果一個(gè)數(shù)為NaN,相等操作返回為false萨咳,不等操作返回true
  • 如果兩個(gè)數(shù)都為對象懊缺,則比較他們是不是同一個(gè)對象,如果兩個(gè)操作數(shù)都指向同一個(gè)對象培他,返回true

全等和不全等

    僅比較不轉(zhuǎn)換鹃两,先比較兩個(gè)數(shù)所屬的數(shù)據(jù)類型,如果類型不同則不同舀凛,如果類型相同
再繼續(xù)比較兩個(gè)數(shù)的值
console.log("55" == 55); true
    console.log("55" === 55);false
null == undifined;  //false

三目運(yùn)算符 ? :

   variable = boolean_expression ? true_value : false_value;
 如果boolean_expression為true,將true_value賦給variable俊扳,
   否則將false_value賦給variable
       求任意兩個(gè)數(shù)之間最大值
       function max(m,n){
      return m>n?m:n;    //如果m>n為true返回m,如果m>n為false,返回n
       }

賦值運(yùn)算符 =

   將右側(cè)的值賦給左側(cè)的變量
   可以和其他算術(shù)運(yùn)算符連用 *= /= %= += -= 
   a *= 3;

逗號操作符

   可以在一條語句中執(zhí)行多個(gè)操作
   var num1=1,num2 = 2, num3 = 3;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市猛遍,隨后出現(xiàn)的幾起案子馋记,更是在濱河造成了極大的恐慌,老刑警劉巖懊烤,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件梯醒,死亡現(xiàn)場離奇詭異,居然都是意外死亡奸晴,警方通過查閱死者的電腦和手機(jī)冤馏,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來寄啼,“玉大人逮光,你說我怎么就攤上這事《栈” “怎么了涕刚?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長乙帮。 經(jīng)常有香客問我杜漠,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任驾茴,我火速辦了婚禮盼樟,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘锈至。我一直安慰自己晨缴,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布峡捡。 她就那樣靜靜地躺著击碗,像睡著了一般。 火紅的嫁衣襯著肌膚如雪们拙。 梳的紋絲不亂的頭發(fā)上稍途,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音砚婆,去河邊找鬼械拍。 笑死,一個(gè)胖子當(dāng)著我的面吹牛射沟,可吹牛的內(nèi)容都是我干的殊者。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼验夯,長吁一口氣:“原來是場噩夢啊……” “哼猖吴!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起挥转,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤海蔽,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后绑谣,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體党窜,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片斑芜。...
    茶點(diǎn)故事閱讀 40,090評論 1 350
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖豁护,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情欲间,我是刑警寧澤楚里,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站猎贴,受9級特大地震影響班缎,放射性物質(zhì)發(fā)生泄漏蝴光。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一达址、第九天 我趴在偏房一處隱蔽的房頂上張望蔑祟。 院中可真熱鬧,春花似錦沉唠、人聲如沸做瞪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至著拭,卻和暖如春纱扭,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背儡遮。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工乳蛾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人鄙币。 一個(gè)月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓肃叶,卻偏偏與公主長得像,于是被迫代替她去往敵國和親十嘿。 傳聞我的和親對象是個(gè)殘疾皇子因惭,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,033評論 2 355

推薦閱讀更多精彩內(nèi)容

  • 什么是 JavaScript 語言? JavaScript 是一種輕量級的腳本語言绩衷。所謂“腳本語言”(script...
    oWSQo閱讀 1,790評論 0 1
  • 最近開始學(xué)習(xí)的JS蹦魔,做這個(gè)筆記只是為了記錄一下自己的學(xué)習(xí)情況,也算是督促自己每天多看點(diǎn)書咳燕∥鹁觯基本都是書上的內(nèi)容整理了...
    丨ouo丨閱讀 288評論 2 1
  • 第一章 Javascript簡介 Javascript實(shí)現(xiàn) 核心(ECMAScript) 文檔對象模型(DOM) ...
    江上風(fēng)平浪靜閱讀 621評論 0 0
  • 最近幾年,跑步運(yùn)動風(fēng)靡全球招盲,無數(shù)名人參與這種簡單的運(yùn)動低缩,“彩跑”“夜跑”等各種跑族也隨處可見。我佩服他們的毅力曹货,但...
    妙所閱讀 6,089評論 5 3
  • 生活中每個(gè)人都會有恐懼咆繁,這是一種動力,讓我們?nèi)ヅΦ囊环N動力控乾。在生活中我是一個(gè)勇敢的人么介,不管是戀愛的時(shí)候,或工作的...
    蔡志杰閱讀 352評論 0 0