摘要:,返回對(duì)象的字符串表示。布爾操作符邏輯非號(hào)表示返回一個(gè)布爾值,可以應(yīng)用于中的任何值規(guī)則如果操作數(shù)是一個(gè)對(duì)象,返回如果操作數(shù)是一個(gè)空字符串,返回如果操作數(shù)是一個(gè)非空字符串,返回如果操作數(shù)是數(shù)值,返回如果操作數(shù)是任
前段時(shí)間忙,好久沒(méi)更新了,繼續(xù)梳理基礎(chǔ)知識(shí)標(biāo)識(shí)符
這期總結(jié)的是JS的基本概念
所謂的標(biāo)識(shí)符是指變量,函數(shù)屬性的名字,或者函數(shù)的參數(shù)
第一個(gè)字符必須是一個(gè)字母,下劃線(xiàn)(_)或者一個(gè)美元符號(hào)($),其他字母可以是字母,下劃線(xiàn),美元符號(hào)或數(shù)字。
嚴(yán)格模式嚴(yán)格模式是為JS定義一種不同的解析與執(zhí)行模型,要啟用嚴(yán)格模式,可添加如下代碼
"use strict"添加區(qū)域
想要整個(gè)腳本都啟用,則加到腳本頂部
想在某個(gè)函數(shù)體內(nèi)啟用,則在函數(shù)體內(nèi)的頂部添加
添加目的消除Javascript語(yǔ)法的一些不合理、不嚴(yán)謹(jǐn)之處,減少一些怪異行為
消除代碼運(yùn)行的一些不安全之處,保證代碼運(yùn)行的安全
提高編譯器效率,增加運(yùn)行速度
為未來(lái)新版本的Javascript做好鋪墊
變量ECMAScript的變量是松散類(lèi)型的,所謂松散類(lèi)型就是可以用來(lái)保存任何類(lèi)型的數(shù)據(jù)
變量的定義var
let(ES6引入)
數(shù)據(jù)類(lèi)型ECMAScript中有7種數(shù)據(jù)類(lèi)型,其中6種是基本數(shù)據(jù)類(lèi)型,1種是復(fù)雜數(shù)據(jù)類(lèi)型
基本數(shù)據(jù)類(lèi)型 String,Number,Boolean,Null,Undefined,Symbol
復(fù)雜數(shù)據(jù)類(lèi)型 Object
typeof操作符用于判斷數(shù)據(jù)類(lèi)型,可返回值有
string
number
boolean
undefined
object
function
symbol
typeof對(duì)于基本類(lèi)型,除了null都可以顯示正確類(lèi)型
typeof對(duì)于對(duì)象,除了函數(shù)都會(huì)顯示 object
對(duì)于 null 來(lái)說(shuō),雖然它是基本類(lèi)型,但是會(huì)顯示 object,這是一個(gè)存在很久了的 Bug,因?yàn)樵?JS 的最初版本中,使用的是 32位系統(tǒng),為了性能考慮使用低位存儲(chǔ)了變量的類(lèi)型信息,000 開(kāi)頭代表是對(duì)象,然而 null 表示為全零,所以將它錯(cuò)誤的判斷為 object。雖然現(xiàn)在的內(nèi)部類(lèi)型判斷代碼已經(jīng)改變了,但是對(duì)于這個(gè) Bug 卻是一直流傳下來(lái)。
如果我們想獲得一個(gè)變量的正確類(lèi)型,可以通過(guò) Object.prototype.toString.call(xx)。這樣我們就可以獲得類(lèi)似 [object Type] 的字符串。
只有一個(gè)值的數(shù)據(jù)類(lèi)型:undefined,null
如果定義的變量準(zhǔn)備在將來(lái)用于保存對(duì)象,那么最好將該變量初始化為null而不是其他值,這樣一來(lái),只要直接檢查null值就可以知道相應(yīng)的變量是否已經(jīng)保存了一個(gè)對(duì)象的引用
實(shí)際上,undefined值是派生自null值的,因此對(duì)他們的相等性測(cè)試要返回true
也就是說(shuō)
null == undefined // true null === undefined // falseBoolean(any :any) :boolean
n/a 或 N/A 指不適用的意思
數(shù)據(jù)類(lèi)型 | 轉(zhuǎn)換為true的值 | 轉(zhuǎn)換為false的值 |
---|---|---|
Boolean | true | false |
String | 任何非空字符串 | **(空字符串) |
Number | 任何非零數(shù)字值(包括無(wú)窮大) | 0和NaN |
Object | 任何對(duì)象 | null |
undefined | n/a | undefined |
null | n/a | null |
八進(jìn)制字面值的第一位必須是零(0),十六進(jìn)制的字面值的前兩位必須是0x
八進(jìn)制字面量在嚴(yán)格模式下是無(wú)效的,會(huì)導(dǎo)致支持該模式的JS引擎拋出錯(cuò)誤
在進(jìn)行算數(shù)計(jì)算時(shí),所有以八進(jìn)制和十六進(jìn)制表示的數(shù)值最終都將被轉(zhuǎn)換成十進(jìn)制的值
保存浮點(diǎn)數(shù)值需要的內(nèi)存空間是保存整數(shù)值的兩倍
isFinite()函數(shù)可用于測(cè)試一個(gè)數(shù)值是不是有窮的
NaNNaN,即非數(shù)值,是一個(gè)特殊的數(shù)值,這個(gè)數(shù)值用于表示一個(gè)本來(lái)要返回?cái)?shù)值的操作數(shù)未返回?cái)?shù)值的情況,這樣做可以防止拋出錯(cuò)誤而停止代碼執(zhí)行
NaN特點(diǎn)
任何涉及NaN(例:NaN/6)都會(huì)返回NaN
NaN與任何值都不相等,包括NaN本身
isNaN()該函數(shù)可用于確認(rèn)參數(shù)是否"不是數(shù)值",該函數(shù)接收到一個(gè)值后,會(huì)嘗試將這個(gè)值轉(zhuǎn)換為數(shù)值,而任何不能被轉(zhuǎn)換為數(shù)值的值都會(huì)導(dǎo)致這個(gè)函數(shù)返回true
數(shù)值轉(zhuǎn)換有三個(gè)函數(shù)可以把非數(shù)值轉(zhuǎn)換為數(shù)值: Number()、parseInt()和parseFloat(),Number()適用于任何數(shù)據(jù)類(lèi)型,而后者則專(zhuān)門(mén)用于把字符串轉(zhuǎn)換成數(shù)值。
Number(any :any) :number
boolean: true和false分別被轉(zhuǎn)換成0和1
number: 返回原值
null: 返回0
undefined: 返回NaN
string:
字符串只包含數(shù)字,則將其轉(zhuǎn)換成十進(jìn)制數(shù)值
字符串中包含有效的浮點(diǎn)格式,則將其轉(zhuǎn)換為相應(yīng)的浮點(diǎn)數(shù)值
字符串中包含有效的十六進(jìn)制格式,則將其轉(zhuǎn)換為相同大小的十進(jìn)制整數(shù)值
字符串為空,轉(zhuǎn)換成0
字符串中包含除上述格式之外的字符,將其轉(zhuǎn)換成NaN
object: 會(huì)先調(diào)用對(duì)象的valueOf()方法,然后依照前面的規(guī)則轉(zhuǎn)換返回的值,如果轉(zhuǎn)換的結(jié)果是NaN,則調(diào)用對(duì)象toString()方法,然后再次依照前面規(guī)則轉(zhuǎn)換返回的字符串值
parseInt(str: string, base?: number) :number
轉(zhuǎn)換成字符串時(shí),會(huì)忽略字符串前面的空格,直至找到第一個(gè)非空格字符,如果第一個(gè)字符不是數(shù)字字符或者負(fù)號(hào),則會(huì)返回NaN
該函數(shù)會(huì)一直解析,直到遇到一個(gè)非數(shù)字字符,則停止轉(zhuǎn)換。例:parseInt("123abc") // 123
遇到浮點(diǎn)數(shù)字符串,則會(huì)去小數(shù)取整。例parseInt("11.3") // 11
如果以O(shè)x開(kāi)頭且后面跟數(shù)字字符,會(huì)將其當(dāng)做一個(gè)十六進(jìn)制整數(shù),如果字符串以0開(kāi)頭后跟數(shù)字字符,則會(huì)將其當(dāng)作一個(gè)八進(jìn)制數(shù)來(lái)解析
第二個(gè)參數(shù)是可選的,代表進(jìn)制,十六進(jìn)制則填16
parseFloat(str: string) :number
parseFloat和parseInt類(lèi)似,只不過(guò)他可以解析整數(shù)和浮點(diǎn)數(shù)
該函數(shù)只能解析十進(jìn)制值,因此它沒(méi)有用第二個(gè)參數(shù)指定基數(shù)的用法
String類(lèi)型字符串的特點(diǎn)是不可變的,也就是說(shuō),字符串一旦創(chuàng)建,它們的值就不能改變。要改變某個(gè)變量保存的字符串,首先要銷(xiāo)毀原來(lái)的字符串,然后再用另一個(gè)包含新值的字符串填充該變量。
toString(base ?: number) :string
該方法用于將一個(gè)值轉(zhuǎn)換為字符串類(lèi)型,幾乎所有類(lèi)型都有這個(gè)函數(shù),除了null和undefined, 該函數(shù)有個(gè)參數(shù),用于設(shè)置輸出數(shù)值的基數(shù)。
String(any :any) :string
該函數(shù)能將任何類(lèi)型轉(zhuǎn)換成字符串
規(guī)則:
如果值有toString()方法, 則調(diào)用該方法(沒(méi)有參數(shù))并返回相應(yīng)的結(jié)果
如果值是null,則返回"null"
如果值是undefined,則返回"undefined"
Object類(lèi)型在ECMAScript中的對(duì)象其實(shí)就是一組數(shù)據(jù)和功能的集合。對(duì)象可以通過(guò)執(zhí)行new操作符后跟要?jiǎng)?chuàng)建的對(duì)象類(lèi)型的名稱(chēng)來(lái)創(chuàng)建。在不給構(gòu)造函數(shù)傳遞參數(shù)時(shí),括號(hào)可省略。
所有引用類(lèi)型的值都是Object的實(shí)例
僅僅創(chuàng)建Object的實(shí)例并沒(méi)有什么用處,關(guān)鍵是要理解一個(gè)重要的思想: 在ECMAScript中,Object類(lèi)型是它的實(shí)例的基礎(chǔ),換句話(huà)說(shuō),Object類(lèi)型所具有的任何屬性和方法也同樣存在于更具體的對(duì)象中。
每個(gè)對(duì)象都具有下列屬性和方法
constructor: 保存著用于創(chuàng)建當(dāng)前對(duì)象的函數(shù),對(duì)于前面的例子而言,構(gòu)造函數(shù)就是Object()
hasOwnProperty(propertyName: string) :boolean, 用于檢查給定的屬性在當(dāng)前對(duì)象實(shí)例中(而不是實(shí)例的原型中)是否存在。其中,作為參數(shù)的屬性名(propertyName)必須以字符串形式指定。
toLocaleString() :string, 返回對(duì)象的字符串表示,該字符串與執(zhí)行環(huán)境的地區(qū)對(duì)應(yīng)。
toString() :string, 返回對(duì)象的字符串表示。
valueOf() ,返回對(duì)象的字符串、數(shù)值或布爾值表示,通常與toString() 方法的返回值相同。
操作符 一元操作符(只能操作一個(gè)值的操作符) 遞增遞減操作符(++, --),包括兩類(lèi),前置型和后置型前置型指將操作符放在數(shù)值變量前面,在計(jì)算數(shù)值時(shí)優(yōu)先執(zhí)行變量數(shù)值
后置型指將操作符放在數(shù)值變量后面,在計(jì)算數(shù)值時(shí)最后執(zhí)行變量數(shù)值
遞增遞減操作符適用于任何類(lèi)型的值,它遵循如下規(guī)則
字符串?dāng)?shù)字類(lèi)型時(shí),先將其轉(zhuǎn)換為數(shù)字值,再執(zhí)行加減操作,字符串變量變成數(shù)值變量。
非字符串?dāng)?shù)字類(lèi)型時(shí),將變量值設(shè)置為NaN,字符串變量變成數(shù)值變量。
布爾類(lèi)型時(shí),先將其轉(zhuǎn)換成0或1,再執(zhí)行加減操作,布爾值變量變成數(shù)值變量。
浮點(diǎn)類(lèi)型時(shí),直接執(zhí)行加減1操作。
對(duì)象時(shí),先調(diào)用對(duì)象的valueOf()方法,已取得一個(gè)可供操作的值,然后對(duì)該值應(yīng)用前述規(guī)則。如果結(jié)果是NaN,則在調(diào)用toString()方法后再應(yīng)用前述規(guī)則,對(duì)象變量變成數(shù)值變量
一元加和減操作符對(duì)數(shù)值應(yīng)用一元加減操作符時(shí),代表正負(fù)號(hào)。
對(duì)非數(shù)值應(yīng)用一元加減操作符時(shí),相當(dāng)于調(diào)用Number()函數(shù)。
位操作符ECMAScript中的所有數(shù)值都以64位格式存儲(chǔ),但位操作符不能直接操作64位的值,而是先將64位的值轉(zhuǎn)換成32位的整數(shù),然后執(zhí)行操作,最后再將結(jié)果轉(zhuǎn)換成回64位。
對(duì)于有符號(hào)的整數(shù),32位中的前31位用于表示整數(shù)的值,第32位用于表示數(shù)值的符號(hào),0表示整數(shù),1表示負(fù)數(shù)。
負(fù)數(shù)同樣以二進(jìn)制碼存儲(chǔ),但使用的格式是二進(jìn)制補(bǔ)碼,計(jì)算一個(gè)數(shù)值的二進(jìn)制補(bǔ)碼需要經(jīng)過(guò)下列步驟
求這個(gè)數(shù)值絕對(duì)值的二進(jìn)制碼。
求二進(jìn)制反碼,即將0替換為1,1替換為0
得到的二進(jìn)制反碼加1
按位非該操作符用一條波浪線(xiàn)(~)表示,執(zhí)行按位非的結(jié)果就是返回?cái)?shù)值的反碼。
按位非操作的本質(zhì):操作數(shù)的負(fù)值減1
按位與該操作符用一個(gè)和號(hào)字符(&)表示,它有兩個(gè)操作符數(shù),同1得1,有0得0。
按位或該操作符用一個(gè)豎線(xiàn)符號(hào)(|)表示,它有兩個(gè)操作符數(shù),有1得1,同0得0。
按位異或該操作符用一個(gè)插入符號(hào)(^)表示,它有兩個(gè)操作符數(shù),只有一個(gè)1才得1,兩位都是1或都是0,則返回0。
左移該操作符由兩個(gè)小于號(hào)(<<)表示,這個(gè)操作符會(huì)將數(shù)值的所有位(不包括符號(hào)位)向左移動(dòng)指定的位數(shù),不足補(bǔ)0,左移不會(huì)影響符號(hào)位。
有符號(hào)右移該操作符由兩個(gè)大于號(hào)(>>)表示,這個(gè)操作符會(huì)將數(shù)值的所有位(不包括符號(hào)位)向右移動(dòng)指定的位數(shù),不足補(bǔ)0,但保留符號(hào)位。
無(wú)符號(hào)右移該操作符由三個(gè)大于號(hào)(>>>)表示,這個(gè)操作符會(huì)將數(shù)值的所有位(32位,包括符號(hào)位)向右移動(dòng)指定的位數(shù),不足補(bǔ)0。
布爾操作符 邏輯非(!號(hào)表示)返回一個(gè)布爾值,可以應(yīng)用于ECMAScript中的任何值規(guī)則:
如果操作數(shù)是一個(gè)對(duì)象,返回false
如果操作數(shù)是一個(gè)空字符串,返回true
如果操作數(shù)是一個(gè)非空字符串,返回false
如果操作數(shù)是數(shù)值0,返回true
如果操作數(shù)是任意非0數(shù)值(包括Infinity),返回false
如果操作數(shù)是null,返回true
如果操作數(shù)是NaN,返回true
如果操作數(shù)是undefined,返回true
同時(shí)使用兩個(gè)邏輯非操作符,實(shí)際上就會(huì)模擬Boolean()轉(zhuǎn)換函數(shù)的行為,第一個(gè)邏輯非操作會(huì)基于無(wú)論什么操作數(shù)返回一個(gè)布爾值,而第二個(gè)邏輯非操作則對(duì)該布爾值求反,于是就得到了這個(gè)值真正對(duì)應(yīng)的布爾值,真正結(jié)果與對(duì)這個(gè)值使用Boolean()函數(shù)相同。
邏輯與(&&表示)邏輯與操作可以應(yīng)用于任何類(lèi)型的操作數(shù),而不僅僅是布爾值,在有一個(gè)操作數(shù)不是布爾值的情況下,邏輯與操作就不一定返回布爾值
規(guī)則:
如果第一個(gè)操作數(shù)是對(duì)象,則返回第二個(gè)操作數(shù)。
如果第二個(gè)操作數(shù)是對(duì)象,則只有在第一個(gè)操作數(shù)的求值結(jié)果為true的情況下才會(huì)返回該對(duì)象。
如果兩個(gè)操作數(shù)都是對(duì)象,則返回第二個(gè)操作數(shù)
如果第一個(gè)操作數(shù)是null,則返回null
如果第一個(gè)操作數(shù)是NaN,則返回NaN
如果第一個(gè)操作數(shù)是undefined,則返回undefined
邏輯與操作屬于短路操作,即如果第一個(gè)操作數(shù)能夠決定結(jié)果,那么就不會(huì)再對(duì)第二個(gè)操作數(shù)求值。對(duì)于邏輯與操作而言,如果第一個(gè)操作數(shù)是false,則它不會(huì)執(zhí)行第二個(gè)操作數(shù)。
邏輯或(||表示)和邏輯與相似,如果有一個(gè)操作數(shù)不是布爾值,邏輯或也不一定返回布爾值;
規(guī)則:
如果第一個(gè)操作數(shù)是對(duì)象,則返回第一個(gè)操作數(shù)
如果第一個(gè)操作數(shù)的求職結(jié)果為false,則返回第二個(gè)操作數(shù)
如果兩個(gè)操作數(shù)都是對(duì)象,則返回第一個(gè)操作數(shù)
如果兩個(gè)操作數(shù)都是null,則返回null
如果兩個(gè)操作數(shù)都是NaN,則返回NaN
如果兩個(gè)操作數(shù)都是undefined,則返回undefined
邏輯或也是短路操作符,如果第一個(gè)操作數(shù)的求值結(jié)果為true,就不會(huì)對(duì)第二個(gè)操作數(shù)求值了。利用邏輯或這一行為來(lái)避免為變量賦null或undefined值
乘性操作符乘性操作符在操作數(shù)不是數(shù)值情況下會(huì)先使用Number()將其轉(zhuǎn)換為數(shù)值。
乘法(*)規(guī)則:
兩個(gè)數(shù)都為數(shù)值,則執(zhí)行相應(yīng)的乘法運(yùn)算,若數(shù)值超出Infinity則返回Infinity或-Infinity
若有一個(gè)操作數(shù)為NaN,則結(jié)果為NaN
若Infinity與0相乘,則結(jié)果為NaN
若Infinity與非0相乘,則結(jié)果為Infinity,符號(hào)取決于有符號(hào)操作數(shù)的符號(hào)。
若Infinity與Infinity相乘,則結(jié)果是Infinity
若一個(gè)操作數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,再應(yīng)用上面規(guī)則
除法(/)規(guī)則:
兩個(gè)數(shù)都是數(shù)值,則執(zhí)行相應(yīng)的除法運(yùn)算,若數(shù)值超出Infinity則返回Infinity或-Infinity
若有一個(gè)操作數(shù)是NaN,則結(jié)果是NaN
若Infinity被Infinity除,則結(jié)果是NaN
若0被0除,則結(jié)果是NaN
若非0有限數(shù)除以0,則結(jié)果是Infinity或-Infinity
若Infinity被任何非零數(shù)值除,結(jié)果是Infinity或-Infinity
若一個(gè)操作數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,再應(yīng)用上面規(guī)則
求模(%)規(guī)則:
兩個(gè)數(shù)都是數(shù)值,則執(zhí)行相應(yīng)的余數(shù)運(yùn)算
如果被除數(shù)是無(wú)窮大值而除數(shù)是有限大的數(shù)值,則返回NaN
如果被除數(shù)是有限大的數(shù)值而除數(shù)是零,則結(jié)果是NaN
如果是Infinity被Infinity除,則結(jié)果是NaN
如果被除數(shù)是有限大的數(shù)值而除數(shù)是無(wú)窮大的數(shù)值,則結(jié)果是被除數(shù)
如果被除數(shù)是零,則結(jié)果是零
若一個(gè)操作數(shù)不是數(shù)值,則在后臺(tái)調(diào)用Number()將其轉(zhuǎn)換為數(shù)值,再應(yīng)用上面規(guī)則
加性操作符 加法規(guī)則:
兩個(gè)數(shù)都是數(shù)值,執(zhí)行常規(guī)的加法運(yùn)算,根據(jù)下列數(shù)值返回結(jié)果
若一個(gè)操作數(shù)是NaN,則結(jié)果是NaN
若兩個(gè)操作數(shù)都是Infinity,則結(jié)果是Infinity
若兩個(gè)操作數(shù)都是-Infinity,則結(jié)果是-Infinity
若Infinity加-Infinity,則結(jié)果是NaN
(+0) + (+0) = (+0)
(-0) + (-0) = (-0)
(+0) + (-0) = (+0)
若有一個(gè)操作數(shù)是字符串,則根據(jù)下列規(guī)則
如果兩個(gè)操作數(shù)都是字符串,則將第二個(gè)操作數(shù)與第一個(gè)操作數(shù)拼接起來(lái)
如果只有一個(gè)操作數(shù)是字符串,則將另一個(gè)操作數(shù)轉(zhuǎn)換為字符串,然后將兩個(gè)字符串拼接起來(lái)
若有一個(gè)操作數(shù)是對(duì)象、數(shù)值或布爾值,則調(diào)用他們的toString()方法取得相應(yīng)的字符串值,然后再應(yīng)用前面關(guān)于字符串的規(guī)則,對(duì)于undefined和null,則分別調(diào)用String()函數(shù)并取得字符串"undefined"和"null"
減法規(guī)則:
若兩個(gè)數(shù)都是數(shù)值,執(zhí)行常規(guī)的減法運(yùn)算,并返回相應(yīng)的結(jié)果
若一個(gè)操作數(shù)是NaN,則結(jié)果是NaN
若Infinity減Infinity,則結(jié)果是NaN
若-Infinity減-Infinity,則結(jié)果是NaN
若Infinity減-Infinity,則結(jié)果是Infinity
若-Infinity減Infinity,則結(jié)果是-Infinity
(+0) - (+0) = (+0)
(-0) - (+0) = (-0)
(-0) - (-0) = (+0)
若有一個(gè)操作數(shù)是字符串,布爾值,null或undefined,則先在后臺(tái)調(diào)用Number()函數(shù)將其轉(zhuǎn)換為數(shù)值,然后再根據(jù)前面的規(guī)則執(zhí)行減法計(jì)算,若轉(zhuǎn)換結(jié)果是NaN,則結(jié)果是NaN
若有一個(gè)操作數(shù)是對(duì)象,則調(diào)用對(duì)象的valueOf()方法以取得表示該對(duì)象的數(shù)值,若得到的值是NaN,則減法結(jié)果就是NaN,若對(duì)象沒(méi)有valueOf()方法,則調(diào)用其toString()方法并將得到的字符串轉(zhuǎn)換為數(shù)值
關(guān)系操作符指小于(<),大于(>),小于等于(<=)和大于等于(>=),皆返回布爾值
規(guī)則:
若兩個(gè)操作數(shù)都是數(shù)值,則執(zhí)行數(shù)值比較
若兩個(gè)操作數(shù)都是字符串,則比較兩個(gè)字符串對(duì)應(yīng)的字符編碼值
如果一個(gè)操作數(shù)是數(shù)值,則將另一個(gè)操作數(shù)轉(zhuǎn)換為一個(gè)數(shù)值,然后執(zhí)行數(shù)值比較
如果一個(gè)操作數(shù)是對(duì)象,則調(diào)用這個(gè)對(duì)象的valueOf()方法,用得到的結(jié)果按照前面的規(guī)則執(zhí)行比較,若對(duì)象沒(méi)有valueOf()方法,則調(diào)用toString()方法,并用得到的結(jié)果根據(jù)前面的規(guī)則執(zhí)行比較
若一個(gè)操作數(shù)是布爾值,則先將其轉(zhuǎn)換為數(shù)值,然后再執(zhí)行比較
任何操作數(shù)與NaN比較,結(jié)果都是false
相等操作符 相等(==)和不相等(!=)——先轉(zhuǎn)換再比較規(guī)則:
若有一個(gè)操作數(shù)是布爾值,則在比較相等性之前先將其轉(zhuǎn)換為數(shù)值,false轉(zhuǎn)換成0,true轉(zhuǎn)換成1。
若一個(gè)操作數(shù)是字符串,另一個(gè)操作數(shù)是數(shù)值,在比較相等性之前先將字符串轉(zhuǎn)換為數(shù)值。
如果一個(gè)操作數(shù)是對(duì)象,另一個(gè)操作數(shù)不是,則調(diào)用對(duì)象的valueOf()方法,用得到的基本類(lèi)型值按照前面的規(guī)則進(jìn)行比較
null和undefined是相等的。
要比較相等性之前,不能將null和undefined轉(zhuǎn)換成其他任何值。
如果有一個(gè)操作數(shù)是NaN,則相等操作符返回false,而不相等操作符返回true,即使兩個(gè)操作數(shù)都是NaN,相等操作符也返回false,因?yàn)镹aN和NaN不相等
如果兩個(gè)操作數(shù)都是對(duì)象,則比較它們是不是同一個(gè)對(duì)象,如果兩個(gè)操作數(shù)都指向同一對(duì)象,則相等操作符返回true,否則返回false。
全等(===)和不全等(!==)——僅比較不轉(zhuǎn)換null==undefined會(huì)返回true,因?yàn)樗鼈兪穷?lèi)似的值,但null===undefined會(huì)返回false,因?yàn)樗鼈兪遣煌?lèi)型的值。
條件操作符三元運(yùn)算符 variable = boolean_expression ? true_value : false_value賦值操作符
乘/賦值(*=)
除/賦值(/=)
加/賦值(+=)
減/賦值(-=)
模/賦值(%=)
左移/賦值(<<=)
有符號(hào)右移/賦值(>>=)
無(wú)符號(hào)右移/賦值(>>>=)
所有的賦值操作符規(guī)則都一樣
let num = 10 num += 1 // 等價(jià)于 num = num + 1逗號(hào)操作符
逗號(hào)操作符可以在一條語(yǔ)句中執(zhí)行多個(gè)操作
var num1 = 1, num2 = 2, num3 = 3;
逗號(hào)操作符多用于聲明多個(gè)變量,除此之外,還可以用于賦值,在賦值時(shí),逗號(hào)操作符總會(huì)返回表達(dá)式的最后一項(xiàng)
let num = (5, 1, 4, 3, 0); // num的值為0語(yǔ)句
各語(yǔ)言的語(yǔ)句都差不多,這里就不一一介紹了,這里只列舉
if語(yǔ)句
do-while語(yǔ)句
while語(yǔ)句
for語(yǔ)句
for-in語(yǔ)句,迭代語(yǔ)句,可用來(lái)枚舉對(duì)象的屬性; 如果表示要迭代的對(duì)象的變量值為null或undefined,for-in語(yǔ)句會(huì)拋出錯(cuò)誤,ES5雖然修正這一行為,他不會(huì)拋出錯(cuò)誤,只是不執(zhí)行循環(huán)體,但是在使用for-in循環(huán)之前,先檢測(cè)確認(rèn)該對(duì)象的值是不是null或undefined
label語(yǔ)句
break和continue語(yǔ)句,break和contiune的區(qū)別在于,break是退出當(dāng)前循環(huán)體; continue是退出當(dāng)前循環(huán),繼續(xù)執(zhí)行下一個(gè)循環(huán)
with語(yǔ)句,作用是把代碼作用域設(shè)置到一個(gè)特定的對(duì)象中,目的是為了簡(jiǎn)化多次編寫(xiě)同一個(gè)對(duì)象的工作。大量使用with語(yǔ)句會(huì)導(dǎo)致性能下降。
switch語(yǔ)句,switch中可以使用任何的數(shù)據(jù)類(lèi)型,無(wú)論是字符串還是對(duì)象,case的值可以是常量,變量和表達(dá)式。switch中使用的是全等操作符,不會(huì)發(fā)生類(lèi)型轉(zhuǎn)換
js里面的函數(shù)沒(méi)有簽名,函數(shù)重載也不可能實(shí)現(xiàn),即不能定義相同名字的函數(shù),通過(guò)參數(shù)個(gè)數(shù)的多少來(lái)調(diào)用相應(yīng)的函數(shù)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://www.ezyhdfw.cn/yun/99809.html
摘要:沒(méi)錯(cuò),中的繼承正如你所理解的一樣,也是成對(duì)出現(xiàn)的。由于中的函數(shù)沒(méi)有簽名,因此無(wú)法實(shí)現(xiàn)接口繼承,只支持實(shí)現(xiàn)繼承,而繼承的主要方式,是通過(guò)原型鏈實(shí)現(xiàn)的,要理解原型鏈,首先要知道什么是原型,不懂的小伙伴,可以看這篇博文一眼看穿 繼承 我們知道JS是OO編程,自然少不了OO編程所擁有的特性,學(xué)習(xí)完原型之后,我們趁熱打鐵,來(lái)聊聊OO編程三大特性之一——繼承。 繼承這個(gè)詞應(yīng)該比較好理解,我們耳熟能...
摘要:復(fù)制變量值基本類(lèi)型在復(fù)制變量值的時(shí)候,會(huì)在變量對(duì)象上創(chuàng)建一個(gè)新值,然后把該值復(fù)制到為新變量分配的位置上。 這篇文章將梳理下環(huán)境,作用域鏈,變量對(duì)象和活動(dòng)對(duì)象,以及內(nèi)存管理問(wèn)題。 基本類(lèi)型和引用類(lèi)型的值 我們都知道JS中的數(shù)據(jù)類(lèi)型有兩大類(lèi),基本數(shù)據(jù)類(lèi)型和引用數(shù)據(jù)類(lèi)型,下面從三個(gè)方面來(lái)解剖他們①保存方式基本類(lèi)型的值是指簡(jiǎn)單的數(shù)據(jù)段,引用類(lèi)型的值是指那些可能由多個(gè)值構(gòu)成的對(duì)象。 基本類(lèi)型...
摘要:說(shuō)白了就是可以在構(gòu)造函數(shù)上調(diào)用屬性來(lái)指向原型,從而創(chuàng)建那個(gè)對(duì)象實(shí)例的原型對(duì)象使用原型有什么好處呢使用原型的好處是可以讓所有對(duì)象實(shí)例共享它所包含的屬性和方法。轉(zhuǎn)暈了麼是不是超級(jí)亂 原型 原型還是比較重要的,想單獨(dú)抽出一章來(lái)細(xì)說(shuō),說(shuō)到原型,那么什么是原型呢? 在構(gòu)造函數(shù)創(chuàng)建出來(lái)的時(shí)候,都有一個(gè)prototype(原型)屬性,這個(gè)屬性是一個(gè)指針,系統(tǒng)會(huì)默認(rèn)的創(chuàng)建并關(guān)聯(lián)一個(gè)對(duì)象,這個(gè)對(duì)象就是原...
閱讀 3165·2023-04-25 18:54
閱讀 2665·2021-11-02 14:40
閱讀 3276·2021-09-23 11:58
閱讀 2490·2019-08-30 13:50
閱讀 1289·2019-08-29 12:46
閱讀 3177·2019-08-28 17:51
閱讀 734·2019-08-26 11:47
閱讀 954·2019-08-23 16:17