let、var、const的使用
es6中新增了两种定义变量的命令let和const;和var一样,let和const都可以定义声明变量,他们之间的区别:
var声明的变量会挂载zaiwindow上,而let、const不会。
var a=100;
let b=100;
const c=100;
console.log(a,window.a);//输出 100 100
console.log(b,window.b);//输出 100 undefined
console.log(c,window.c);//输出 200 undefined
var声明变量存在变量提升,let、const不会;(变量提升,即函数及变量的声明都将被提升到函数的最顶部)
console.log(a);//undefined 变量提升,编译解释时,先var a;然后console.log(a),最后初始化a=100
console.log(b);//报错 b is not defined
console.log(c);//报错 c is not defined
var a=100;
let b=100;
const c=100;
let、const声明形成快作用域,var随处可用
function a(){
if(true){
var a=100;
let b=100;
const c=100;
}
console.log(a);// 100
console.log(b);//报错 b is not defined
console.log(c);//报错 c is not defined
}
同一作用域下,let、const不可以声明同名变量,var可以
var a=100;
let b=100;
const c=100;
console.log(a);//100
console.log(b);//100
console.log(c);//100
var a=200;
let b=200;
const c=200;
console.log(a);//100
console.log(b);//报错 Identifier 'b' has already been declared ===> 标识符a已经被声明了。
console.log(c);//报错 Identifier 'c' has already been declared ===> 标识符a已经被声明了。
const定义的变量一旦声明必须赋值,且不可使用null占位,声明后不可修改(即不可重新赋值),如果声明的是复合类型数据,可以修改其属性。
const a = 100;
const list = [];
list[0] = 10;
console.log(list); // [10]
const obj = {a:100};
obj.name = 'apple';
obj.a = 10000;
console.log(obj); // {a:10000,name:'apple'}
开发中,建议var、let、const使用的优先级const>let>var;let几乎可以取代var的使用
===与==区别
- ==比较不区分类型,当两边数据类型不同时,会自动先转化为数据类型相同的数据,再进行比较;===区分数据类型,当两边数据不同则返回false。
- ===两边任意一个值为NaN时就返回false,==两边数据一个是null一个是undefined时返回true。
- ===属于严格比较,只有当数据类型相同且值相等时才会返回true。
- 对于string、number等基础数据类型相比较,和=时由区别的;对于Array,Object等高级类型相比较,二者是没有区别的了;对于基础数据类型与高级数据类型相比较,==将高级类型转化为基础类型,进行值比较,===直接返回false(因为数据类型不同)。
判断一个值是否是NaN,只能使用isNaN( ) 来判断)
JS阻止冒泡事件、取消默认事件
阻止冒泡事件
JQuery实现:在让事件绑定的方法返回false即可(return false)
原生JavaScript实现:W3C是调用e.stopPropagation()来阻止冒泡事件,IE则是使用e.cancelBubble=true来阻止冒泡事件。结合代码如下:
function stopBubble(e){
if(e&&e.stopPropagation) e.stopPropagation();
else window.event.cancelBubble=true;
}
取消默认事件(行为)
JQuery实现:JQuery中的return既可以阻止冒泡事件也可以取消默认事件(行为)
JavaScript中的return只可以取消默认事件(行为),且W3C中e.preventDefault以及IE中的e.returnValue=false都可以取消默认事件(行为),代码如下:
function stopDefault(e){
if(e.preventDefault) e.preventDefault();
else window.event.returnValue=false;
return false;
}
评论区