02-JS運算符和對象

object.png

一、 運算符分類

  1. 一元運算符

注意:先運算再賦值還是先賦值再運算。

var a = -1;
//隱式將條件轉(zhuǎn)為布爾值
var b = a++ ? ++a : a++;
console.log(b);     //1
  1. 二元運算符
  • 基本運算符+= -= *=

涉及隱式數(shù)據(jù)類型轉(zhuǎn)換:

  1. +運算 針對字符串而言举庶,優(yōu)先拼接字符串
  2. 非+運算 優(yōu)先轉(zhuǎn)為數(shù)字
  1. 三目運算符
//當obj對象不存在時,創(chuàng)建新對象。
obj = obj ? obj : {};
if(!obj) obj = {}
obj = obj || {};(較常用)

關(guān)系運算符

var a = 5;
var b = a > 3;
console.log(b);     //true

var a ;
console.log(!a);    //true  a為undefined
//undefined == null;
// 0 == false == "";

console.log(undefined==null);   //true
console.log(null==0);          //false
//要比較相等性之前琳轿,不能將 null 和 undefined 轉(zhuǎn)換成其他任何值,并且規(guī)定null 和 undefined 是相等的耿芹。null 和 undefined都代表著無效的值崭篡。
console.log(typeof undefined);  //undefined
console.log(typeof null);       //object
// NaN != NaN;
var a="b";
console.log(Number("a"));   //NaN
console.log(Number("a")==NaN);  //false
if(a==false){
    // 0 false ""
}

if(a===false){
    // false
}
if(!a){
    // 0 false "" undefined null NaN
}
var a = "a";
a++;
console.log(a);     //NaN
var b = "b";
b += 1;
console.log(b);     //b1

算術(shù)運算

var a="5a";
var b=3;
var s=a-b;
console.log(s);     //NaN

位運算符

  • 左移
console.log(2<<2);  //8(一般不超過32,否則會溢出)
  • 右移
console.log(2>>2);  //0
  • 位與運算
console.log(5&6);   //7   (101&110=>100)
  • 位或運算
console.log(5|6);   //7     (101|110=>111)
  • 異或運算 (相同為0,不同為1 )
console.log(5^6);   //3     (101^110=>011)
  • 位非運算 (取反再+1)
var a=4;
console.log(~a); //-5
var str="abcdef";
console.log(str.indexOf("d"));
if(~str.indexOf("g")){  //或者 if(str.indexOf("g")>-1){
    //當數(shù)組中不存在某項時吧秕,執(zhí)行該操作
}

二琉闪、程序三大結(jié)構(gòu)

1. 順序結(jié)構(gòu)

2. 選擇結(jié)構(gòu)

  • 分支語句if-else

    非布爾類型的條件判斷 : true=>1 false=>0

    if(5 == true){
        //console.log("此時這里不執(zhí)行。");
    }
    if(1 == true){
        console.log("這里執(zhí)行了砸彬。");
    }
    

    if("abc") string類型 -------> 所有的非空字符串都代表 true颠毙, "" 代表false

    if(obj) object類型 -------->所有的非null的對象都代表true,null代表false

    if(undefined) -------> 代表false砂碉,

    if(NaN) --------> 代表false

    if( function ) ---------> 如果函數(shù)存在蛀蜜,代表true

  • switch

    var num = 3;
    switch(num) {
        default : alert("不知道!"); break;   //這里也需要break
        case 1 : alert("星期一"); break;
        case 2 : alert("星期二"); break;
    }
    
    //通過switch判斷是否全等
    var grade = "100";
    switch(true){
        case grade === 100: console.log("A");break;
        case grade > 90: console.log("B");break;  //B
        default:console.log("C");break;
    }
    

3.循環(huán)結(jié)構(gòu)

  • while循環(huán)

  • do-while循環(huán)

  • for循環(huán)

  • 跳出循環(huán)

    • continue

      通常在使用continue時增蹭,在它之前使變量自增滴某。

      var i = 1, s = 1;
      while(i < 10){
          if(i % 5 === 0) continue;
          s *= i;
          i++;                   //死循環(huán)
      }
      
    • break

      可以跳出到指定位置

      // break只會終止當前循環(huán),距離它最近的循環(huán)
      x1: for (var i = 0; i < 3; i++) {
              for (var k = 0; k < 3; k++) {
                  console.log(i, k);
                  if (k === 1 && i === 1) {
                      break x1;
                  }
              }
          }
      輸出結(jié)果:
      0 0
      0 1
      0 2 
      1 0 
      1 1
      

三滋迈、 對象

變量:儲存數(shù)據(jù)的位置霎奢,key可以是自定義的任意值(無序列表)

對象:儲存數(shù)據(jù)的結(jié)構(gòu)

var arr = [];
arr._proto_ = Object  //此時數(shù)組的原產(chǎn)地已經(jīng)變成Object

obj.a = 10 <=>obj["a"] = 10;

obj.a不能使用變量代替屬性;obj["a"]可以使用變量代替屬性饼灿。

//需要使用變量來作為屬性名時,使用[]將變量放入
var s = "h";
var obj = {
    a:1,
    b:2,
    c:"s1",
    [s]:3
};
console.log(obj.h);     //3

設(shè)置對象屬性值時椰憋,默認將屬性名隱式轉(zhuǎn)換成字符串

var s = 1;
obj[s] = 10;    //此時的s為字符串"1"
console.log(obj);   

數(shù)組會隱式轉(zhuǎn)換為字符串

var obj = {};        
var arr = [1,2,3];
var arr1 = [];
obj[arr] = 10;
console.log(obj, obj[arr1])     //{1,2,3: 10} undefined
//查找obj[arr1]時赔退,實際查找的是obj[],所以是undefined
var obj = {};
var o = {a:1};
var o1 = {a:2};
obj[o] = 10;            //此時的o橙依,會默認轉(zhuǎn)換為[object Object]
console.log(obj[o1]);   //此時的o1,也會隱式轉(zhuǎn)換為[object Object]硕旗,所以結(jié)果為:10

對象隱式轉(zhuǎn)為布爾值

console.log({} == {});      //false
console.log({} == 0);       //false
console.log([] == []);      //false 兩遍類型相等窗骑,不進行轉(zhuǎn)化,比較的是地址
console.log([] == true);    //false  ""=>flase和true比較
console.log(![] == false); //true;  先轉(zhuǎn)布爾漆枚,[]為true,取反為false,
console.log([] == false);   //true; 先轉(zhuǎn)字符串创译,再轉(zhuǎn)為0,和0比較

遍歷對象時墙基,只有可枚舉屬性是可以遍歷的

__proto__ 是不可枚舉屬性软族。

判斷一個值刷喜,是否在對象中存在

//對象是以鍵值對存儲,因此查找速度最快立砸,且必須使用鍵來查找值
console.log("d" in obj);

刪除屬性和值

var obj={a:1, b:2, c:3, d:undefined, e:{x:1}};
obj.e = null;       //刪除對象之前掖疮,必須要設(shè)置為null,否則內(nèi)存無法回收
delete obj.e;
console.log(obj);
  • 將對象變?yōu)樽址?/li>
var obj = {a:1, b:2, c:3, d:undefined};
//轉(zhuǎn)換為  a=1&b=2&c=3&d=undefined;
var str = "";
var len = 0,l;
for(var s in obj){
    len++;
}
for(var prop in obj){
    l++;
    str += prop + "=" + obj[prop];
    if(l < len)
        str += "&";
}
console.log(str);

//轉(zhuǎn)換為 {a:1,b:2,c:3,d:undefined}
var str = "{";
for(var prop in obj){
    str += prop + ":" + obj[prop] + ",";
}
str = str.slice(0, -1);
str += "}";
console.log(str);

利用JSON字符串

var obj={a:1,b:2,c:3,d:undefined};
var str = JSON.stringify(obj);
console.log(str);
  • 字符串 => 對象
var str = '{"a":1, "b":2, "c":3}';
var obj1 = JSON.parse(str);
console.log(obj1);
  • 一行代碼實現(xiàn)克隆對象(缺點:不能復制undefined)
var obj = {a:1, b:2, c:3, d:undefined, e:{}};
var obj1 = JSON.parse(JSON.stringify(obj));
console.log(obj1);//{a: 1,b: 2,c: 3,e: {}}  
  • ES6淺復制
var o = {a:1, b:2, c:3};
var o1 = {c:5, d:10, e:20};
var obj = {};
Object.assign(obj, o, o1);
//或 var obj = Object.assign({},o,o1);
console.log(obj);
  • Object.assign應(yīng)用
var div = document.getElementById("box");
Object.assign(div.style,{
    width:"50px",
    height:"50px",
    backgroundColor:"red"
});
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末颗祝,一起剝皮案震驚了整個濱河市浊闪,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌螺戳,老刑警劉巖搁宾,帶你破解...
    沈念sama閱讀 217,277評論 6 503
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異倔幼,居然都是意外死亡盖腿,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,689評論 3 393
  • 文/潘曉璐 我一進店門损同,熙熙樓的掌柜王于貴愁眉苦臉地迎上來奸忽,“玉大人,你說我怎么就攤上這事揖庄±醪耍” “怎么了?”我有些...
    開封第一講書人閱讀 163,624評論 0 353
  • 文/不壞的土叔 我叫張陵蹄梢,是天一觀的道長疙筹。 經(jīng)常有香客問我,道長禁炒,這世上最難降的妖魔是什么而咆? 我笑而不...
    開封第一講書人閱讀 58,356評論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮幕袱,結(jié)果婚禮上暴备,老公的妹妹穿的比我還像新娘。我一直安慰自己们豌,他們只是感情好涯捻,可當我...
    茶點故事閱讀 67,402評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著望迎,像睡著了一般障癌。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上辩尊,一...
    開封第一講書人閱讀 51,292評論 1 301
  • 那天涛浙,我揣著相機與錄音,去河邊找鬼。 笑死轿亮,一個胖子當著我的面吹牛疮薇,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播我注,決...
    沈念sama閱讀 40,135評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼按咒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了仓手?” 一聲冷哼從身側(cè)響起胖齐,我...
    開封第一講書人閱讀 38,992評論 0 275
  • 序言:老撾萬榮一對情侶失蹤玻淑,失蹤者是張志新(化名)和其女友劉穎嗽冒,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體补履,經(jīng)...
    沈念sama閱讀 45,429評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡添坊,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,636評論 3 334
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了箫锤。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片贬蛙。...
    茶點故事閱讀 39,785評論 1 348
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖谚攒,靈堂內(nèi)的尸體忽然破棺而出阳准,到底是詐尸還是另有隱情,我是刑警寧澤馏臭,帶...
    沈念sama閱讀 35,492評論 5 345
  • 正文 年R本政府宣布野蝇,位于F島的核電站,受9級特大地震影響括儒,放射性物質(zhì)發(fā)生泄漏绕沈。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,092評論 3 328
  • 文/蒙蒙 一帮寻、第九天 我趴在偏房一處隱蔽的房頂上張望乍狐。 院中可真熱鬧,春花似錦固逗、人聲如沸浅蚪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,723評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽掘鄙。三九已至,卻和暖如春嗡髓,著一層夾襖步出監(jiān)牢的瞬間操漠,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 32,858評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留浊伙,地道東北人撞秋。 一個月前我還...
    沈念sama閱讀 47,891評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像嚣鄙,于是被迫代替她去往敵國和親吻贿。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,713評論 2 354

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