摘要:我們?cè)儆脧?fù)合條件來(lái)檢測(cè)一下值的類型由此我們知道,隱式強(qiáng)制類型轉(zhuǎn)換成了反值為說(shuō)明的布爾值為,并對(duì)它的類型做出全等比較,最后返回。
我的第一篇文章
從開(kāi)始學(xué)前端直至現(xiàn)在已有一年的時(shí)間了,期間遇見(jiàn)了很多事情,也經(jīng)歷了各式各樣的技術(shù)問(wèn)題,為了讓自己擺脫這些這些問(wèn)題,最后養(yǎng)成了看書(shū)的習(xí)慣。因?yàn)槊看慰赐昕傆X(jué)得自己內(nèi)功又增了,哪怕只是一點(diǎn)。可惜的是每次看完都會(huì)忘掉一些,尤其是沒(méi)有自己的實(shí)踐和知識(shí)點(diǎn)太多時(shí)總會(huì)遺忘一些,但我不希望這種事情發(fā)生,
可能只是因?yàn)檫@一點(diǎn),以后就會(huì)找?guī)滋斓腷ug,這是每個(gè)程序員都不敢預(yù)想的場(chǎng)景。最后我決定把我每天對(duì)知識(shí)的累積,用我理解的角度去記錄下來(lái)。筆記和文章唯一的不同前者是私有,后者是公開(kāi)的,希望通過(guò)我對(duì)它理解可以幫助他人,也請(qǐng)大家能指出文章中的問(wèn)題,感激不盡。
類型
內(nèi)置類型ECMAScript語(yǔ)言中所有的值都對(duì)應(yīng)一個(gè)類型。語(yǔ)言類型包括:Undefined,Null,Boolean,String,Number,Object。對(duì)于語(yǔ)言引擎和開(kāi)發(fā)人員來(lái)說(shuō),類型是值的內(nèi)部特征,它定義了值的行為,是所有編程語(yǔ)言的共有的概念,并使其區(qū)別于其他值。
拋開(kāi)學(xué)術(shù)界對(duì)類型定義的分歧,為什么說(shuō)JavaScript是否有類型也很重要呢?讓我們來(lái)詳細(xì)介紹一下,關(guān)于JavaScript類型這部分的知識(shí)。
首先JavaScript有七種內(nèi)置類型:
空值(Null)
未賦值(Undefined)
字符串(String)
數(shù)字(Number)
對(duì)象(Object)
布爾值(Boolean)
符號(hào)(Symbol ES6中新增)
注: 除對(duì)象以外其他統(tǒng)稱為基本類型.
下面我們用typeof查看這七種類型值,但是結(jié)果卻和它們的類型名稱不盡相同。
typeof {community:"sf"} // "Object" typeof undefined // "undefined" typeof 12 // "number" typeof "javascript" // "string" typeof true // "boolean" typeof Symbol // "symbol"
上面的這六種類型都和我typeof出來(lái)的字符串互相對(duì)應(yīng)。
咦? null 哪去了?現(xiàn)在我門來(lái)多帶帶看案它的類型.
typeof null === "object" //true
你可能會(huì)看到null并不是"null",這是JavaScript一個(gè)歷史悠久的bug,但是由于web系統(tǒng)對(duì)其的依賴,很難修復(fù),這個(gè)bug也許會(huì)一直存在雨javascript中。我們需要銘記在心,避免以后程序出現(xiàn)問(wèn)題。我們?cè)儆脧?fù)合條件來(lái)檢測(cè)一下null值的類型:
var a = null; (!a && typeof a === "object" ) // true
由此我們知道,null隱式強(qiáng)制類型轉(zhuǎn)換成了反值為true(說(shuō)明null的布爾值為false),并對(duì)它的類型做出全等比較,最后返回true。
typeof function(){} // "function"
這樣看來(lái),function也是JavaScript的一個(gè)內(nèi)置類型吧?可以去查閱一下ECMAScript規(guī)范,它其實(shí)是Object類型中的子類型,也就是說(shuō)它屬于Object類型范疇之內(nèi),具體來(lái)說(shuō),函數(shù)是可調(diào)用對(duì)象,它有一個(gè)內(nèi)部屬性[[call]]使其可以被調(diào)用。
那么它有什么對(duì)象的特征呢?讓我們來(lái)在控制臺(tái)中打印出來(lái)看一下.
可以看到,函數(shù)當(dāng)中有一些可讀取屬性,就比如 .length屬性,代表的是其聲明的參數(shù)個(gè)數(shù),
var fun = function(a,b){} fun.length //2
查看了function,讓我們?cè)賮?lái)查看一下Array類型.
typeof [1,2,3] === "object" //true
它們都同屬于Object子類型, 數(shù)組的元素按數(shù)字順序來(lái)進(jìn)行索引(非字符串那樣通過(guò)字符串鍵值),其length屬性是其數(shù)組元素個(gè)數(shù)。
值和類型JavaScript中的類型是相對(duì)于他的值來(lái)定義的,也就是說(shuō)衡量類型的永遠(yuǎn)都是值本身,與變量無(wú)關(guān),變量只是儲(chǔ)存值的一個(gè)容器,在這個(gè)容器中有不確定的值類型
JavaScript 不做類型強(qiáng)制,也就是說(shuō),語(yǔ)言引擎不要求變量總是與初始化值同類型的值。
var a = 10; typeof a // "number" a = true; typeof a //"boolean"
typeof 總會(huì)返回一個(gè)字符串
typeof typeof 10 //string
typeof 10 返回為 "number" 之后再次使用typeof "number" 結(jié)果為 ”string“
Undeclared與Undefined我們都知道undefined代表未被復(fù)制,它也是我們七大類型中的一種,如下:
var a; typeof a //"undefined" var b = 20; var c; b = c; typeof b // "undefined" typeof c // "undefined"
可能有些朋友對(duì)Undeclared有些陌生,讓我們來(lái)看一下它與Undefined的定義:
在作用域中未被聲明過(guò)的變量為 Undeclared。
作用域中聲明了且未被賦值的為Undefined。
遺憾的是我們?cè)趈s環(huán)境下測(cè)試時(shí),兩種情況卻并沒(méi)有出現(xiàn)Undeclared,這是為什么呢?
var a ; a; //undefined b; //ReferenceError : b is not defined
"b is not defined " 容易讓人誤解為與undefined的性質(zhì)一樣,其它們兩個(gè)是兩碼事此時(shí)瀏覽器如果報(bào)成 b is not found 或者 b is not declared會(huì)更加準(zhǔn)確。
雖然JS當(dāng)中沒(méi)有Undeclared的顯式概念,但是我們要知道它是存在的,Undefined 與 Undeclared 是完全兩種不同的場(chǎng)景;
var a ; typeof a //undefined typeof b //undefined
對(duì)于Undeclared照樣返回了undefined。這里b雖然是一個(gè)Undeclared變量,但typeof b 它并沒(méi)有報(bào)錯(cuò),這是因?yàn)閠ypeof有一套安全防范機(jī)制。
typeof Undeclared該安全機(jī)制在瀏覽器運(yùn)行時(shí)的JavaScript代碼來(lái)說(shuō)是很有幫助的,因?yàn)槎鄠€(gè)腳本文件會(huì)在共享的全局命名空間中加載變量。
舉個(gè)例子 ,如果我們?cè)诓紶柇h(huán)境下為一個(gè)值做非空判斷。
if(DETELE){} // ReferenceError: detele is not defined
拋出了錯(cuò)誤,上面已經(jīng)解釋過(guò),此處不再?gòu)?qiáng)調(diào)它的準(zhǔn)確意義。為了避免程序出現(xiàn)這種促五,我們可以使用 typeof 來(lái)對(duì)它進(jìn)行改造。
if(typeof DETELE === "undefined"){ }
同樣屬于非空條件判斷,后者的優(yōu)勢(shì),我想大家已經(jīng)看到了,不論何時(shí)它都不會(huì)報(bào)錯(cuò),只是淡出的返回布爾值。
可以看到 typeof 的安全防范機(jī)制為我們提供了非常便捷的方式,還有一種方式如下:
if(window.DETELE){}
如果這個(gè)變量存在于全局中,我們可以利用它,全局變量中默認(rèn)為全局屬性的特性,來(lái)通過(guò)查找對(duì)象屬性的方式去查看它,當(dāng)然這只是在全局條件下,當(dāng)非全局條件下,我們可以繼續(xù)使用typeof去判斷。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/82079.html
摘要:以和為例,說(shuō)明中的數(shù)字?jǐn)?shù)據(jù)如何轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)。對(duì)象用來(lái)表示通用的固定長(zhǎng)度的原始二進(jìn)制數(shù)據(jù)緩沖區(qū)。中的數(shù)字?jǐn)?shù)據(jù)如何轉(zhuǎn)換為二進(jìn)制數(shù)據(jù)對(duì)和有了一個(gè)大概的了解,下面讓我們來(lái)看下它是如何進(jìn)行二進(jìn)制數(shù)據(jù)操作的。 概述 本文主要通過(guò)對(duì)JavaScript中數(shù)字?jǐn)?shù)據(jù)與二進(jìn)制數(shù)據(jù)之間的轉(zhuǎn)換,讓讀者能夠了解在JavaScript中如何對(duì)數(shù)字類型(包括但不限于Number類型)進(jìn)行處理。 二進(jìn)制數(shù)據(jù)在日常...
摘要:設(shè)計(jì)模式是以面向?qū)ο缶幊虨榛A(chǔ)的,的面向?qū)ο缶幊毯蛡鹘y(tǒng)的的面向?qū)ο缶幊逃行┎顒e,這讓我一開(kāi)始接觸的時(shí)候感到十分痛苦,但是這只能靠自己慢慢積累慢慢思考。想繼續(xù)了解設(shè)計(jì)模式必須要先搞懂面向?qū)ο缶幊蹋駝t只會(huì)讓你自己更痛苦。 JavaScript 中的構(gòu)造函數(shù) 學(xué)習(xí)總結(jié)。知識(shí)只有分享才有存在的意義。 是時(shí)候替換你的 for 循環(huán)大法了~ 《小分享》JavaScript中數(shù)組的那些迭代方法~ ...
摘要:總結(jié)通過(guò)使用和,我們能夠在數(shù)據(jù)和二進(jìn)制數(shù)據(jù)中進(jìn)行互相轉(zhuǎn)換。下一篇系列相關(guān)的博客,將會(huì)介紹如何通過(guò)來(lái)向后端傳遞二進(jìn)制數(shù)據(jù),以及如何處理通過(guò)收到的二進(jìn)制數(shù)據(jù)。 概述 上一篇博客我們說(shuō)到了如何進(jìn)行數(shù)字類型(如Short、Int、Long類型)如何在JavaScript中進(jìn)行二進(jìn)制轉(zhuǎn)換,如果感興趣的可以可以閱讀本系列第二篇博客——WebSocket系列之JavaScript中數(shù)字?jǐn)?shù)據(jù)如何轉(zhuǎn)換為...
CSS介紹 學(xué)前端必備掌握CSS樣式,css為層疊樣式表,用來(lái)定義頁(yè)面的顯示效果,加強(qiáng)用戶的體驗(yàn)樂(lè)趣,那么如何用css到html中呢? style屬性方式 利用標(biāo)簽中的style屬性來(lái)改變顯示樣式 p標(biāo)簽 在head中加入style標(biāo)簽 p { color: #FFF000;} 鏈接方式 總結(jié)CSS 選擇器名稱 { 屬性名:屬性值; ……. } 屬性與屬性之間用 分號(hào)...
摘要:的代碼采用另外一套編譯器,將代碼預(yù)先編譯成機(jī)器指令,在編譯過(guò)程或運(yùn)行過(guò)程中,一旦發(fā)現(xiàn)語(yǔ)法錯(cuò)誤或違反類型標(biāo)記的情況出現(xiàn),便重新將代碼交予引擎解析執(zhí)行。 Asm.js簡(jiǎn)介 早前流行的JavaScript將會(huì)統(tǒng)治世界這個(gè)梗,很好的說(shuō)明了JavaScript的將來(lái),能用JavaScript書(shū)寫(xiě)的都會(huì)用JavaScript來(lái)進(jìn)行書(shū)寫(xiě),不過(guò)JavaScript的弱類型是其被黑性能的很大不一部分,而...
閱讀 2542·2021-10-11 10:58
閱讀 1020·2019-08-29 13:58
閱讀 1661·2019-08-26 13:32
閱讀 830·2019-08-26 10:40
閱讀 3256·2019-08-26 10:18
閱讀 1756·2019-08-23 14:18
閱讀 1106·2019-08-23 10:54
閱讀 435·2019-08-22 18:39