本文观点来自于《你所不知道的javascript》
EcmaScript类型包含语言类型和规范类型
js内置7种类型:包含 undefined null boolean string number object symbol
1.typeof
- typeof 会返回一个String
typeof typeof {} === "string"
- typeof 具有安全机制,(对于undeclear变量的值返回undefined)
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 运算符来查看值的类型
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.function
function 是javascript的内置类型,实际上是object 的一个 “子类型”
函数不仅仅是对象,可以拥有属性,例如length
function a(b,c){
a.b = b
a.c = c
}
console.log(a.length) == 2
3 数组
数组也是对象,它是object子类型
typeof [1,2,3] === "object" //true
js基础知识复习-第二章(值)
array string number 是一个程序最基本的组成部分,但在js中,它们让人喜忧掺半。
1.数组
- js的数组可以容纳任何类型的值
var a = [1,"2",[3]]
- 使用delete可以从数组中数组,单元删除数组的length并不会变化
var a = [1,"2",[3]]
delete a[0]
console.log(a,a.length)
//[empty, "2", Array(1)] 3
- 数组和对象一样包含字符串键值key和属性,但是不会改变length
var a = [1,"2",[3]]
a["foo"] = "foo"
a.length === 3
a.foo === "foo"
- key值如果可以被强制类型转换为十进制数字,会当做数组索引处理
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