携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第8天,点击查看活动详情
大家好!我是前端爬楼工程师🚹,一个野生程序员。好奇新技术,仰慕牛大佬。如果喜欢我的文章,可以关注➕点赞,为我注入能量,与我一同成长吧~
类型
JavaScript里有六种基本类型: null, undefined, string, number, boolean, symbol。可以通过typeof来判断。
这里的类型是并不是变量的类型,而是值持有类型,也就是说Js里typeof检查的也是这个变量对应的值的类型。
typeof的安全防范机制
- 可以判断全局变量:当我们直接使用变量作为判断条件时,运行会报错,使用
typeof的话会避免错误发生,这里有两种方式可以避免报错,typeof wx === undefined和window.wx === undefined,window在取任何属性的时候都不会报错
if(wx) {wx.config()} // RefrenceError:wx is not define
- 可以判断局部变量:这里只能使用
typeof,window就用不上了。
(function (){
function XYZ(){
// code...
}
function doSomething(){
var helper = (typeof XYZ != undefined) : XYZ: function(){
//default
}
var val = helper()
}
doSomething()
})
undefined 和 undeclare
undefined是值的一种,undelcare表示变量没用声明过
undefined和undeclare比较接近,js对于undeclare的变量使用的时候回报 not defined,这和undefined太相似了,很容易让我们误以为两个是同一个东西,其实不然。
值
数组
数组里可以放任意的数据类型;
var a = []
a[0] = 1
a[2] = 3
a['foo'] = bar;
a.length //3
a[1] // undefined
因为数组也是对象a['foo'],可以给a添加一个foo属性,但这个操作不会影响数组a的长度。
类数组
类数组通过工具函数转换为数组(indexOf, concat, forEach, slice),ES6的Array.from()也能实现。
常见的类数组有:
DOM元素列表,arguments
字符串
字符串是不可变的,数组是可变的。
字符串的成员函数不会改变其原始值,而是创建并返回一个新的字符串 例如:
c = a.toUpperCase()
c === a //false
数字
JavaScript里数字默认情况下是用十进制表示,没用真正意义的整数,基于IEEE 754标砖实现的(也称为浮点数),使用的双精度格式(即64位二进制)
42.fixed(2) // 语法错误 ,因为.被看做是42的一部分
42..fixed(2) // 正确
(42).fixed(2) // 正确
42 .fixed(2)
0.1+ 0.2 与 0.3的问题
// 实际上
0.1 + 0.2 === 0.3 // false
ES6出了一个Number.EPSILON的api
polyfill版本:
if(!Number.EPSILON){
Number.EPSILON = Math.pow(2, -52)
}
function numbersCloseEnoughToEqual(n1, n2){
return Math.abs(n1 - n2) < Number.EPSILON;
}
var a = 0.1 + 0.2
var b = 0.3
numbersCloseEnoughToEqual(a, b) // true