语法:boolean “name” in Object 判断对象是否具有某一个属性
var myObject = {name:‘吴小碎‘};
console.log(‘name‘ in myObject); //true 返回值为true表示myObject中存在name属性
console.log(‘age‘ in myObject); //false 返回值为false表示myObject中不存在name属性
var objONE = {}; //直接量(字面量)生成对象
var objTWO = new Object(); //new运算符生成对象
值类型赋值不会改变原始数据
引用类型在内存中是一个,值改变会改变以前的数据
var num1 = ‘13‘;
var num2 = num1;
num2 = ‘23‘;
console.log(num1) //13 改变值num2的值num1并未改变,证明num1与num2在空间分别占有自己的内存,是两个独立的个体
console.log(num2) //23
console.log(num1 == num2); //false 这里是值引用比较,故只比较值是否相同
var obj1 = {name:‘吴小碎‘,age:18};
var obj2 = obj1;
obj2.sex = ‘男‘
console.log(obj2); // {name: "吴小碎", age: 18, sex: "男"}
console.log(obj1); // {name: "吴小碎", age: 18, sex: "男"} 当增加obj2属性时,obj1随之改变
console.log(obj1 == obj2); //true 引用类型公用一个内存,相当于obj2是obj1的桌面快捷方式,obj1和obj2指向同一内存路径
- 删除数组中的一个元素
- 对象的属性或者方法
- 删除一个没有用var 的变量声明
var arr1 = [1,2,3,4]
delete arr1[0]
console.log(arr1); // [empty, 2, 3, 4] 长度不变,只是删除其中的值
var obj = {name:‘吴小碎‘,age:18};
delete obj.name
console.log(obj) //{age: 18} 删掉键值对
var a1 = ‘test‘;
delete a1;
console.log(a1); //test 变量a1还存在,a1未被删除
a2 = ‘test‘;
delete a2;
console.log(a2) //Uncaught ReferenceError: a2 is not defined 证明已经删除变量a2
try{ 可能出现错误的代码 } catch(e) { e->接收的错误信息 }finally{ 无论怎样都会最后执行 }
try {
//可能出现错误的代码
//1.
obj.name; //系统报错信息->obj is not defined
//2.
//throw new Error(‘我是错误信息‘); //强行扔出报错信息
} catch (error) {
//如果出错执行 error->try抛出的错误信息
console.log(error); //ReferenceError: a is not defined
} finally {
//无论怎样都会最后执行
console.log(‘最终执行我了吗?‘); //最终执行我了吗?
}
-
js执行: 预解析(函数,和var) , 一句一句执行
解析顺序:scirpt代码块 -> 解析执行环境 -> var || function (function优先级高于var)
<script>
console.log(msg);//与下方msg定义变量存在于两个代码块故:Uncaught ReferenceError: msg is not defined
</script>
<script>
var msg = ‘吴小碎‘
</script>
<script>
console.log(msg); //msg在上一个代码快解析完成,所以打印出:吴小碎
console.log(msg1); //与msg1存在与同一个代码块,解析执行环境存在在一个script代码块内所以:undefined
var msg1 = ‘吴小碎‘
</script>
凡是将数据和运算符等联系起来有值的式子就是表达式