1. ==和===
js中==运算会先将两边的数据类型进行转换,如: 1=='1',会先把'1'转换成1,再进行比较,结果自然是true
而===运算是将两边的数据进行完全比较,数据类型和数值必须完全相同。因此1==='1',结果自然是false
2.变量提升
变量提升即在js中声明的变量会被提升到当前函数作用域的顶部,下一以一个例子进行解析
var a = 'aaa';
function b() {
console.log(a);
var a = 'bbb';
console.log(a);
}
b();
console.log(a);
此时输出的结果为
//undefined
//bbb
//aaa
由于存在变量提升,上述代码的实际执行顺序为:
var a = 'aaa';
function b() {
var a;
console.log(a);
a = 'bbb';
console.log(a);
}
b();
console.log(a);
函数b内部的a的定义会被提升到函数b的顶部,因此第一个a的输出是undefined。
那为什么最后一个a的输出仍是aaa而不是bbb呢,这是因为当函数内部变量与函数外部变量同名时,内部读取,修改的变量默认为内部变量,因此不会修改到外部的a(此时可以在内部通过使用this.a读取外部的a)
3.JS浮点数计算
js中存在浮点数计算不精确的问题,即:0.1+0.2不等于0.3,而是输出0.3000000000004。
解决这个问题的方法是将浮点数运算改为非浮点数运算,即:(0.1*10+0.2*10)/10,输出便为0.3
此处提一下js的四舍五入方法:
Math.ceil(3.5) // 4
Math.floor(3.5) // 3
Math.round(3.5) // 4