一眼看穿JS基本概念

2021-09-03 01:23:12 字數 4679 閱讀 9507

前段時間忙,好久沒更新了,繼續梳理基礎知識

這期總結的是js的基本概念

所謂的識別符號是指變數,函式屬性的名字,或者函式的引數

第乙個字元必須是乙個字母,下劃線(_)或者乙個美元符號($),其他字母可以是字母,下劃線,美元符號或數字。

嚴格模式是為js定義一種不同的解析與執行模型,要啟用嚴格模式,可新增如下**

"use strict"
ecmascript的變數是鬆散型別的,所謂鬆散型別就是可以用來儲存任何型別的資料

ecmascript中有7種資料型別,其中6種是基本資料型別,1種是複雜資料型別

基本資料型別 string,number,boolean,null,undefined,symbol

複雜資料型別 object

typeof操作符用於判斷資料型別,可返回值有

typeof對於基本型別,除了null都可以顯示正確型別

typeof對於物件,除了函式都會顯示 object

對於 null 來說,雖然它是基本型別,但是會顯示 object,這是乙個存在很久了的 bug,因為在 js 的最初版本中,使用的是 32位系統,為了效能考慮使用低位儲存了變數的型別資訊,000 開頭代表是物件,然而 null 表示為全零,所以將它錯誤的判斷為 object。雖然現在的內部型別判斷**已經改變了,但是對於這個 bug 卻是一直流傳下來。
如果我們想獲得乙個變數的正確型別,可以通過 object.prototype.tostring.call(xx)。這樣我們就可以獲得類似 [object type] 的字串。

只有乙個值的資料型別:undefined,null

如果定義的變數準備在將來用於儲存物件,那麼最好將該變數初始化為null而不是其他值,這樣一來,只要直接檢查null值就可以知道相應的變數是否已經儲存了乙個物件的引用

實際上,undefined值是派生自null值的,因此對他們的相等性測試要返回true

也就是說

null == undefined // true

null === undefined // false

n/a 或 n/a 指不適用的意思

資料型別

轉換為true的值

轉換為false的值

boolean

true

false

string

任何非空字串

**(空字串)

number

任何非零數字值(包括無窮大)

0和nan

object

任何物件

undefined

n/aundefined

n/a八進位製字面值的第一位必須是零(0),十六進製制的字面值的前兩位必須是0x

八進位制字面量在嚴格模式下是無效的,會導致支援該模式的js引擎丟擲錯誤

在進行算數計算時,所有以八進位制和十六進製制表示的數值最終都將被轉換成十進位制的值

儲存浮點數值需要的記憶體空間是儲存整數值的兩倍

isfinite()函式可用於測試乙個數值是不是有窮的

nannan,即非數值,是乙個特殊的數值,這個數值用於表示乙個本來要返回數值的運算元未返回數值的情況,這樣做可以防止丟擲錯誤而停止**執行

nan特點

isnan()該函式可用於確認引數是否"不是數值",該函式接收到乙個值後,會嘗試將這個值轉換為數值,而任何不能被轉換為數值的值都會導致這個函式返回true

數值轉換

有三個函式可以把非數值轉換為數值:number()、parseint()和parsefloat(),number()適用於任何資料型別,而後者則專門用於把字串轉換成數值。

number(any :any) :number

object: 會先呼叫物件的valueof()方法,然後依照前面的規則轉換返回的值,如果轉換的結果是nan,則呼叫物件tostring()方法,然後再次依照前面規則轉換返回的字串值

parseint(str: string, base?: number) :number

parsefloat(str: string) :number

tostring(base ?: number) :string

string(any :any) :string

在ecmascript中的物件其實就是一組資料和功能的集合。物件可以通過執行new操作符後跟要建立的物件型別的名稱來建立。在不給建構函式傳遞引數時,括號可省略。

所有引用型別的值都是object的例項

僅僅建立object的例項並沒有什麼用處,關鍵是要理解乙個重要的思想:在ecmascript中,object型別是它的例項的基礎,換句話說,object型別所具有的任何屬性和方法也同樣存在於更具體的物件中。

每個物件都具有下列屬性和方法

遞增遞減操作符(++, --),包括兩類,前置型和後置型

一元加和減操作符

按位非該操作符用一條波浪線(~)表示,執行按位非的結果就是返回數值的反碼。

按位非操作的本質:運算元的負值減1

按位與該操作符用乙個和號字元(&)表示,它有兩個操作符數,同1得1,有0得0。

按位或該操作符用乙個豎線符號(|)表示,它有兩個操作符數,有1得1,同0得0。

按位異或

該操作符用乙個插入符號(^)表示,它有兩個操作符數,只有乙個1才得1,兩位都是1或都是0,則返回0。左移

該操作符由兩個小於號(<<)表示,這個操作符會將數值的所有位(不包括符號位)向移動指定的位數,不足補0,左移不會影響符號位。

有符號右移

該操作符由兩個大於號(>>)表示,這個操作符會將數值的所有位(不包括符號位)向移動指定的位數,不足補0,但保留符號位。

無符號右移

該操作符由三個大於號(>>>)表示,這個操作符會將數值的所有位(32位,包括符號位)向移動指定的位數,不足補0。

邏輯非(!號表示)返回乙個布林值,可以應用於ecmascript中的任何值

規則:

同時使用兩個邏輯非操作符,實際上就會模擬boolean()轉換函式的行為,第乙個邏輯非操作會基於無論什麼運算元返回乙個布林值,而第二個邏輯非操作則對該布林值求反,於是就得到了這個值真正對應的布林值,真正結果與對這個值使用boolean()函式相同。

邏輯與(&&表示)

邏輯與操作可以應用於任何型別的運算元,而不僅僅是布林值,在有乙個運算元不是布林值的情況下,邏輯與操作就不一定返回布林值

規則:邏輯與操作屬於短路操作,即如果第乙個運算元能夠決定結果,那麼就不會再對第二個運算元求值。對於邏輯與操作而言,如果第乙個運算元是false,則它不會執行第二個運算元。

邏輯或(||表示)

和邏輯與相似,如果有乙個運算元不是布林值,邏輯或也不一定返回布林值;

規則:

邏輯或也是短路操作符,如果第乙個運算元的求值結果為true,就不會對第二個運算元求值了。利用邏輯或這一行為來避免為變數賦null或undefined值

乘性操作符在運算元不是數值情況下會先使用number()將其轉換為數值。

乘法(*)

規則:

除法(/)

規則:

求模(%)

規則:加法

規則:

若有乙個運算元是字串,則根據下列規則

若有乙個運算元是物件、數值或布林值,則呼叫他們的tostring()方法取得相應的字串值,然後再應用前面關於字串的規則,對於undefined和null,則分別呼叫string()函式並取得字串"undefined"和"null" 減法

規則:指小於(<),大於(>),小於等於(<=)和大於等於(>=),皆返回布林值

規則:相等(==)和不相等(!=)——先轉換再比較

規則:

全等(===)和不全等(!==)——僅比較不轉換

null==undefined會返回true,因為它們是類似的值,但null===undefined會返回false,因為它們是不同型別的值。

三元運算子 variable = boolean_expression ? true_value : false_value
所有的賦值操作符規則都一樣

let num = 10

num += 1 // 等價於 num = num + 1

逗號操作符可以在一條語句中執行多個操作

var num1 = 1, num2 = 2, num3 = 3;
逗號操作符多用於宣告多個變數,除此之外,還可以用於賦值,在賦值時,逗號操作符總會返回表示式的最後一項

let num = (5, 1, 4, 3, 0); // num的值為0
各語言的語句都差不多,這裡就不一一介紹了,這裡只列舉

js裡面的函式沒有簽名,函式過載也不可能實現,即不能定義相同名字的函式,通過引數個數的多少來呼叫相應的函式

思辨力 一眼看穿偽科學 假資料

今天我來聊一聊,乙個我自己感到非常激動的乙個問題,叫做批判性思維。到底什麼叫做批判性思維,或者我們怎麼樣去鍛鍊自己的批判的思考能力呢?我想先邀請大家來跟我一起思考乙個問題,大家覺得在同等教育質量的情況下,美國的學生或者說歐洲的學生,跟我們亞洲的或者說跟中國的對比,他們最大的優勢在哪?大家可以思考一下...

第一眼看到FireFox時最有感覺的地方

昨天介紹了乙個關於 管理ie表單自動完成功能的小技巧,結果 人的想法很多時候會被外界的東西影響,而且這個影響一般會表現為順從或逆反。畢竟很多的人都說firefox太好了,所以這會嚴重的影響我們對firefox的主觀評價,對其挑刺就是比較必然的事情了。但是在我使用了一段時間後,當我點開firefox的...

收藏 教你一眼看出哪些水果是催熟的,不要再亂吃

現在很多水果都是被催熟的,吃了對身體非常不利,夏天,芒果 西瓜 香蕉等水果都很有可能被催熟,一不小心就被無良的商販騙了 一起來識別哪些水果才是自然熟吧 西瓜識別技巧 收藏 教你一眼看出哪些水果是催熟的,不要再亂吃 拍 打過針的西瓜拍打時聲音 啞 不脆亮.看 自然熟的西瓜籽是黑色的,很飽滿.打過針的西...