JavaScript冷知识

266 阅读2分钟

前言:

最近整理了一些在js中容易被忽略的小知识点,在这里分享出来,多了解一些方便我们日后阅读源码,提升js功底。

1.var创建的变量不能删除

var a = 1;
delete a;
console.log(a);
//输出  1

2.不使用var创建的变量可以删除

a = 1;
delete a;
console.log(a);
//异常  Uncaught ReferenceError: a is not defined

3.函数声明优先级高于函数表达式

var test = function(){ return 1; };
function test(){ return 2; }
console.log(test())
//输出:1

4.代码块或if语句中函数声明不会提升

a()
{
	 function a(){
		 console.log(1)
	 }
}
//输出:Uncaught TypeError: a is not a function

5.逻辑运算符

let test = res.data.obj || {};
//如果res.data.obj为false 则给test赋值{}

a && b();
等价于
if(a){
    b();
}
//如果a为true,则执行b方法;

6.数字类型转String

2.toString() //会报错
2..toString()//'2'
//js中不区分整数跟浮点数,遇到的第一个点会被当做浮点数中的点

7.冻结对象

let obj = {
	a:1,
	b:1
}
Object.freeze(obj) //冻结对象
obj.a = 2;
console.log(obj.a)
//对象被冻结后无法添加、修改、删除属性

8.数字之前的0可以省略,小数点后的0也可以省略(当然,正常情况下不建议省略)

let a = 0.4
等价于
let a = .4;

let b = 3.0;
等价于
let b = 3.;

9.toFixed返回值为字符串

let a = 3.1415;
a.toFixed(2);
// '3.14'

10. 0.1+0.2!=0.3 (这个点相对来说没那么冷,老面试题了)

console.log(0.1+0.2!=0.3)
//输出
//true
解析:
javascript遵循 IEEE 754 规范,在计算中会进行二进制转换,转换时个别位数会丢失,最后导致转换后的数值相加不等于0.3

11. undefined与null的区别

1.在进行比较时(undefined == null)不会进行隐式类型转换,会直接返回true;
2.undefined 为变量未定义时默认值。
例如:
var a = 3;
在编译执行时会分为两步。
1.var a == undefined;
2.a = 3;
3.null 为此处不应有值。

12. void运算符

在个别组件中,为防止undefined被重定义,通常用void 0代替undefined;
本质上 void 0void 1undefined没有区别
void 0 === undefined
输出:
true
void 1 === undefined
输出
true