本文觀點來自於《你所不知道的javascript》複製代碼
js內置7種類型:包含 undefined null boolean string number object symboljavascript
1.typeofjava
typeof typeof {} === "string"複製代碼
var a
typeof a === "undefined"
typeof b === "undefined" //b是 undeclear
// 咱們試圖console.log(b) javascript會報錯
// ReferenceError: b is not defined
// 因此 undefined 和 undeclear不同,此處a 是undefined b是undeclaear
// 看下面代碼
// 想看存不存其餘的js文件包不包含一個變量,可能會寫下這個代碼
if($jq){
//xxx }
//若是$jq沒聲明,會報錯,利用typeof的安全防護機制能幫幫咱們解決
if(typeof $jq!== "undefined")複製代碼
咱們能夠用typeof 運算符來查看值的類型es6
typeof undefined ==== "undefined"
typeof true === "boolean"
typeof 42 === "number"
typeof Symbol() === "symbol"
typeof null === "object"複製代碼
typeof null 是javascript留下的一個bug,存在20年餘,也許不會修復。數組
(!a && typeof a === "object") //true複製代碼
能夠經過上述方法判斷是否爲null安全
2.functionbash
function 是javascript的內置類型,其實是object 的一個 「子類型」函數
函數不單單是對象,能夠擁有屬性,例如lengthui
function a(b,c){
a.b = b
a.c = c
}
console.log(a.length) == 2複製代碼
3 數組spa
數組也是對象,它是object子類型prototype
typeof [1,2,3] === "object" //true複製代碼
array string number 是一個程序最基本的組成部分,但在js中,它們讓人喜憂摻半。
1.數組
var a = [1,"2",[3]]
複製代碼
var a = [1,"2",[3]]
delete a[0]
console.log(a,a.length)
//[empty, "2", Array(1)] 3複製代碼
var a = [1,"2",[3]]
a["foo"] = "foo"
a.length === 3
a.foo === "foo"
複製代碼
var a = [1,"2",[3]]
a["13"] = 42
a.length //14複製代碼
2.類數組 - 具備數組的length和結構可是沒有數組的一些方法
docuemnt.getElementByTagName("div")返回的值和function 的arguments都是類數組
,爲了方便計算,咱們須要把他們轉成數組
// 方法1
var arr = Array.from(arguments)
// 方法2
Array.prototype.slice.call(arguments)複製代碼
3.字符串
字符串反轉
string.split("") //string => array
.reverse() //array reverse
.join() //array => string複製代碼
4.數字
number 採用IEEE 754雙精度格式
// toExponential() 能夠輸出指數格式
var a = 500000000000
b = a.toExponential() //5e+11
//toFixed() 能夠取小數後的位數
var a = 10.22334
a.toFixed(2) === 10.22
10.toFixed(2) // 報錯 Uncaught SyntaxError: Invalid or unexpected token
0.1 + 0.2 === 0.3 //false
複製代碼
整數的安全範圍
Number.MAX_SAFE_INTEGER //9007199254740991
Number.MAX_VALUE // 1.7976931348623157e+308
Number.MIN_SAFE_INTEGER //-9007199254740991
Number.isInterger() 檢測是否在整數的安全範圍以內
//polifly
Number.isInteger = Number.isInteger || function(value) {
return typeof value === 'number' &&
isFinite(value) &&
Math.floor(value) === value;
};複製代碼
void 0 和 void 1 等同於undefined
NaN
typeof不能判斷number是不是NaN,應該用isNaN判斷
let a = 1/'111a'
tupeof a === "unmber" //true
//es6 在Number.isNaN()複製代碼
無窮數 Infinity
Number.MAX_VALUE + 大於0 的數都是 Infinity