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