侧边栏壁纸
博主头像
小白博主等级

just do it!

  • 累计撰写 60 篇文章
  • 累计创建 77 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

JavaScript日常笔记(持续更新)

小白
2019-09-19 / 0 评论 / 0 点赞 / 66 阅读 / 946 字

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;
}
0

评论区