-
in运算符
语法: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属性
-
new运算符 和 直接量(字面量)
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指向同一内存路径
-
delete
- 删除数组中的一个元素
- 对象的属性或者方法
- 删除一个没有用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>
-
表达式
凡是将数据和运算符等联系起来有值的式子就是表达式
-
语句
表达式+分号
-
对象的创建方法
literal(字面量创建)
var o1 = {name : 1, age : 20}
initializer非字面量创建
function Person (){ this.name = 'jim' } Person.prototype.show = function (){console.log('我被执行了')} var o2 = new Person(); //new 实现 Person.call(o2);//将属性添加至o2中 o2.__proto__ = Person.prototype; //将原型属性添加至o2中 var o3 = Object.create(null); //若参数为空则输出一个空对象,也不存在__proto__属性 var o3 = Object.create(Person); //将Person自身所有属性附加到o3的__proto__属性中也包括它的prototype属性 var o3 = Object.create(Person,{ //第一个参数作为o3对象的__proto__来使用,后面的对象当作o3属性使用 size: { value: "large", enumerable: true //可列举的 }, shape: { value: "round", enumerable: true } });
将伪数组转换成数组的方法
var args = Array.prototype.slice.call(arguments); var args = [].slice.call(arguments, 0);