你不知道的javascript

1. 数据类型

在js中有7中数据类型

其中6种是基本类型 包括 null, undefined, boolean, number, string和symbol,还有一种是object

但是判断数据类型的时候除了null以外都可以用typeof

1. null

null应该如何判断呢,应该是这样的

typeof a === 'object' && !a

2) undefined

undefined判断可以用typeof但是在js中比较坑的是undeclared和undefined的是一样的,所以并不能知道变量的声明与否

比较幸运的一点是如果一个变量未声明就拿来用会导致严格模式下的报错而判断一个undeclared的变量却可以防止报错

比如要表示加入a未声明就声明一个a可以写作

2. 数组和类数组

1. 类数组指的是一类对象,他们可迭代,拥有数值作为属性,最重要的一点是他们拥有length属性,所以字符串也是一个类数组。

2. js数组的判断也不能用typeof但是对于对象有一个新的判别方法 instanceof 

3. 数组是一种对象所以可以写作 a['foo'] = 'bar'也可以,但是却不能增加他的length, 但是比较有趣的一点是 a["13"] = "for", 却会导致length变成14,虽然传入的13是一个数值

4. 类数组转化数组可以用

 Array.from( fakeArr ) 

也可以

Array.prototype.slice.call( fakeArr )

,Array.from是一个相当强大的东西,而slice是一个比较有趣的实现。

5. 借用数组的方法是一件很好玩的事情,在js里边数组拥有超级有钱的主,有很多实用的工具,字符串就很穷了,所以字符串可以和数组借用噢,怎么借用呢,就像上边的call那个样子咯。

3. 数值

数值的相关知识比较冷门,但也蛮有意思的 

1. 一直被人诟病的一定是js中没有真正的整数,很经典的一个是

 0.2 + 0.1 = 0.30000000000000004

就是因为js内部存储并不是整型,浮点数这样区分的,

 2. 用e来表示数值是一个很不常见的做法,估计也只是因为计算器显示不够才会那么表示,js中也是可以的噢,比如3.04e3就等于3040

 3. 数值比较有趣的一点是42.toFixed(3)是一种错误的语法,居然是因为42后边的点被当成小数点解析了因为42.也是一个正确的表达方式,所以42..toFixed(3)是没毛病的

 4. 16进制的数值是在前边加 0x 而8进制的数值是在前边加上0

 5. NaN并不是说数据不是一个数值,更贴切的说是一个坏死的数值,比如 2/ 'a' 就是一个坏死的数值。但是

typeof 2/'a' === ‘number' // true

同时js中有一个全局的函数 isNaN,  

'a' === NaN // false
isNaN('a') // true

 6. +0 和 -0 在js中从数值上说一样,但是从向量的角度是不一样的。

 7. ES6的新方法Object.is

Object.is(2/ 'a',  NaN) // true

猜你喜欢

转载自www.cnblogs.com/sowhite/p/8909143.html