js數(shù)據(jù)類型和易混運算符及其優(yōu)先級

數(shù)據(jù)類型

js的數(shù)據(jù)類型共有6種:

  • 數(shù)值(number):整數(shù)和小數(shù)(比如1和3.14)
  • 字符串(string):字符組成的文本(比如"Hello World")
  • 布爾值(boolean):true(真)和false(假)兩個特定值
  • undefined:表示“未定義”或不存在晒喷,即此處目前沒有任何值
  • null:表示空缺,即此處應(yīng)該有一個值访敌,但目前為空
  • 對象(object):各種值組成的集合

前五種屬于簡單類型凉敲,object屬于復(fù)雜類型。

對象又可以分成三個子類型寺旺。

  • 狹義的對象(object)
  • 數(shù)組(array)
  • 函數(shù)(function)
  • 正則表達(dá)式(regexp)

運算符

  1. typeof:檢測數(shù)據(jù)類型爷抓。
    可以檢測:number、string阻塑、boolean蓝撇、undefined、function
    不可以檢測:object陈莽、array渤昌、regexp、null
//可以檢測的類型
typeof 123;// "number"
typeof '123'; // "string"
typeof false; // "boolean"
typeof a;//"undefined"
typeof function(){};//"function"
//不可以檢測的類型
typeof window走搁; // "object"
typeof {}独柑; // "object"
typeof []; // "object"
typeof null私植;// "object"
typeof  /hello/;//"object"

null用===來檢測

var a = null;
a === null;//true
  1. instanceof:檢測變量是否為一個對象的實例群嗤。
    可以檢測:object、array兵琳、regexp
var o = {};
var a = [];
var b = /hello/;
o instanceof Array; // false
a instanceof Array;// true
b instanceof RegExp;//true
//因為以上數(shù)據(jù)類型都是對象
b instanceof Object;//true
a instanceof Object;//true
o instanceof Object;//true
  1. +/-加號
    加號:
  • 在兩個操作數(shù)都是數(shù)字的時候狂秘,會做加法運算
  • 兩個參數(shù)都是字符串或在有一個參數(shù)是字符串的情況下會把另外一個參數(shù)轉(zhuǎn)換為字符串做字符串拼接
  • 在參數(shù)有對象的情況下會調(diào)用其valueOf或toString
  • 在只有一個字符串參數(shù)的時候會嘗試將其轉(zhuǎn)換為數(shù)字
console.log(2+4);//6
console.log("2"+"4");//"24"
console.log(2+"4");//"24"
===============================
console.log(2+new Date());//"2Mon Jan 20 2014 17:15:01 GMT+0800 (China Standard Time)"
==================================
point = {x: 2, y: 8};//Object {x: 2, y: 8}
point + 3;//"[object Object]3"
radius = {r: 5, valueOf: function(r = 5){return r*r}};//Object {r: 5}
radius +3;//28
============================
console.log(+new Date());//1483066791248
console.log(+"4");//4 
console.log(+true);//1
console.log(2+true);//3
console.log(+"true");//NaN
console.log("2"+"true");//2true
=================================

減號:首先將兩邊的變量轉(zhuǎn)化為數(shù)字,再進行運算

console.log(1 - "333hello");//NaN躯肌,Number( "333hello")為NaN
console.log(1 - "123");//-122
console.log(1 - false);//1
console.log(1 - true);//0
console.log(1 - undefined);//NaN
console.log(1 - null);//1
console.log(1 - " ");//1
  1. ==/=== 等號
    === 是嚴(yán)格意義的相等者春,只需注意NaN和NaN不等就行了。
    == 的時候清女,javascript會幫我們做類型轉(zhuǎn)換钱烟。
  • 如果兩個值類型相同,則執(zhí)行嚴(yán)格相等的運算
  • 如果兩個值的類型不同
    • 如果一個是null,一個是undefined拴袭,那么相等
    • 如果一個是數(shù)字读第,一個是字符串,先將字符串轉(zhuǎn)為數(shù)字拥刻,然后比較
    • 如果一個值是true/false則將其轉(zhuǎn)為1/0比較
    • 如果一個值是對象怜瞒,一個是數(shù)字或字符串,則嘗試使用valueOf和toString轉(zhuǎn)換后比較
    • 其它就不相等了
null === undefined;//false
null == undefined;//true
==============================
NaN === NaN;//false
NaN == NaN;//false
===============================
0 === "0";//false
0 == "0";//true
"1" == true;//true
===============================
radius = {r: 5, valueOf: function(r = 5){return r*r}};//Object {r: 5}
radius === 25;//false
radius == 25;//true
==================================
undefined == "";//false
undefined == false;//false
null == "";//false
null == false;//false
"" == false;//true
  1. && 和 ||

JS 的 &&||一般都不會返回true / false般哼,而是返回最后一次短路的值吴汪。

短路原理:
&& :左值為false,整個表達(dá)式為左值;左值為true,整個表達(dá)式為右值
|| :左值為false稚配,整個表達(dá)式為右值;左值為true霜运,整個表達(dá)式為左值

參考文章:全面解析JavaScript中“&&”和“||”
JavaScript的“&&”和“||”操作符總結(jié)
js 與或運算符 || && 妙用
mdn邏輯運算符

其他

NaN:Not a Number。非有效數(shù)值蒋腮,typeof NaN的值為"number"淘捡。NaN和任何值都不相等,包括它自己徽惋,即NaN == NaN為false案淋。

運算符優(yōu)先級
mdn參考文檔
在所有的表達(dá)式中,運算的順序由運算符的優(yōu)先級結(jié)合性決定险绘。

運算符的優(yōu)先級:決定了表達(dá)式中運算執(zhí)行的先后順序踢京,優(yōu)先級高的運算符最先被執(zhí)行。
運算符的結(jié)合性:決定了擁有相同優(yōu)先級的運算符的執(zhí)行順序宦棺。例如:i + + +j + +瓣距,因為++為右結(jié)合,所以改表達(dá)式等價于(i + + ) + (j+ + )代咸。
++運算只能作用于變量蹈丸,不能作用于常量和表達(dá)式,即++i++ 是錯誤的寫法呐芥。)

一般來說

  • 一目運算優(yōu)先級高與二/三目運算
  • 一目運算逻杖、三目運算、賦值運算多為結(jié)合思瘟。例如:w = a: b: c ? d : e? f : g等價于w = a? b : (c? d: (e? f : g))荸百。
  • 運算符的大致優(yōu)先級為:一目運算、+/-/*/%滨攻、位運算符够话、比較運算符蓝翰、邏輯運算符、賦值運算符
例如:a+++b
- 按照優(yōu)先級:后置遞增 > 前置遞增 > 加號女嘲,及等價于`(a++)+b`畜份。
- 按照結(jié)合性:`++`為從右向左結(jié)合,根據(jù)結(jié)合性的定義欣尼,`a++`優(yōu)先級高于`++b`爆雹,所以先進行`a++`運算。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末媒至,一起剝皮案震驚了整個濱河市顶别,隨后出現(xiàn)的幾起案子谷徙,更是在濱河造成了極大的恐慌拒啰,老刑警劉巖,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件完慧,死亡現(xiàn)場離奇詭異谋旦,居然都是意外死亡,警方通過查閱死者的電腦和手機屈尼,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門册着,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人脾歧,你說我怎么就攤上這事甲捏。” “怎么了鞭执?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵司顿,是天一觀的道長。 經(jīng)常有香客問我兄纺,道長大溜,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任估脆,我火速辦了婚禮钦奋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘疙赠。我一直安慰自己付材,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布圃阳。 她就那樣靜靜地躺著厌衔,像睡著了一般。 火紅的嫁衣襯著肌膚如雪限佩。 梳的紋絲不亂的頭發(fā)上葵诈,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天裸弦,我揣著相機與錄音,去河邊找鬼作喘。 笑死理疙,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的泞坦。 我是一名探鬼主播窖贤,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼贰锁!你這毒婦竟也來了赃梧?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤豌熄,失蹤者是張志新(化名)和其女友劉穎授嘀,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體锣险,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡蹄皱,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了芯肤。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片巷折。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖崖咨,靈堂內(nèi)的尸體忽然破棺而出锻拘,到底是詐尸還是另有隱情,我是刑警寧澤击蹲,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布署拟,位于F島的核電站,受9級特大地震影響际邻,放射性物質(zhì)發(fā)生泄漏芯丧。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一世曾、第九天 我趴在偏房一處隱蔽的房頂上張望缨恒。 院中可真熱鬧,春花似錦轮听、人聲如沸骗露。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽萧锉。三九已至,卻和暖如春述寡,著一層夾襖步出監(jiān)牢的瞬間柿隙,已是汗流浹背叶洞。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留禀崖,地道東北人衩辟。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像波附,于是被迫代替她去往敵國和親艺晴。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,086評論 2 355

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