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