一、声明提升
变量声明提升:预编译的时候会将 变量声明 提到最顶部(值不会提示到最顶部)
函数声明提升: 优先级高于变量声明提升
在预编译的时候将 一整个函数 提升到最顶部(包括函数内部的代码块,即: 一处声明,处处使用)
举例:
//变量声明提升
//var a; //预编译的时候会将 变量声明 提到最顶部(值不会提示到最顶部),以至于到var a=123;的时候只是给a进行了赋值
console.log(a);//undefined
var a=123;
console.log(a);//123
//函数声明提升: 优先级高于变量声明提升
//在预编译的时候将 一整个函数 提升到最顶部
//即: 一处声明,处处使用
fn();//111 声明之前就调用
console.log(fn);
function fn() {
console.log(111);
}
fn();//111
console.log(b);//function b(){console.log(777);}
var b=999;
console.log(b);//999 g给b变量赋值
function b(){//预编译的时候已经声明过了,所以现在不会再声明
console.log(777);
}
console.log(b);//999 var b=999;给b赋值的时候将预编译的函数b()给覆盖了,所以此时函数b()将不存在,再次打印会出错
二、操作符
1. in 检测某个属性是否是右侧对象的属性,返回值是布尔值
要把属性名用引号引起来
有则返回true, 没有返回false
2. delete 删除:删除成功则返回true ,失败返回false
可以删除没有用var声明的变量,声明了的就不能删除
可以删除对象中自己的属性(继承之类的的属性不能)
举例;
var obj={
name1:"名字",
err:"属性不存在",
}
var pro="name1"
console.log("name1" in obj);
console.log(obj[pro in obj?pro:"err"]);
var a=111;
b=222;
delete b;//删除B
console.log(delete b);
// console.log(b);//报错
var obj1={
name1:"名字",
age:18,
}
console.log(delete obj1.name);//删除属性
console.log(obj1);