本文观点来自于《你所不知道的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