-
数组: 1、JS中的数组是弱类型的 数组中可以含有不同类型的元素 数组元素甚至可以是对象 或者其他数组; 2.创建 2.1 字面量 var arr = ['ds','aa']; 2.2 new Array构造器 var arr = new Array(); var arr = new Array(10); 则表示该数组有10个空元素(只有一个值的时候表示有多少元素) var arr = new Array('a','b'); 等价于 ['a','b']; new 是可以省略的 3.数组的读写 数组元素增减 用delate可以删除元素,但是数组长度不变,其实delate之后,是设置元素的值为undefined。 arr.push(1); 在数组尾部添加元素 arr.unshift();在数组头部添加元素 delete arr[2]; 是将数组中的下标为2的元素 变成undefined 并非真正的删除 arr.pop() 删除数组的最后一个元素 arr.shift() 删除数组的第一个元素 数组迭代 for循环 for in 遍历(定义在原型上的属性也会遍历出来) 使用hasOwnProperty可以避免将原型上的属性遍历出来 for(i in arr){ if(arr.hasOwnProperty(i)) //不会遍历出原型上的元素 }
查看全部 -
序列化 通过全局的JSON.stringify(obj);做序列化处理 注意: 1、当你对象中有属性的值是undefined的时候,这该属性是不会出现在序列化字符串的结果里 2、当你属性的值是NaN或者Infinity时,序列化的结果是null;当你的属性值是new Date(),序列化的结果是UTC的时间格式 后端返回JSON数据,则用JSON.parse来转化;合法的JSON的属性必须用双引号引起来
查看全部 -
Object.getOwProertyDescriptor(obj,property_name);<br> value: 属性值 writable: 该属性是否可写,可改变<br> enumerable:该属性是否可被枚举,就是可在for in中出现<br> configurable: 该属性的标签是否可改变,是否可用delete将该属性删除。 用defineProperty定义属性时,默认configurable为true,如果设置为false后,该属性不管是什么方式都无法更改。
查看全部 -
1、设置属性值时,如果当前对象没有这个属性,则会通过原型链向上查找这个属性。 2、如果原型上是通过get/set方法来定义的这个属性,那么读写都只会通过get/set方法;这种情况下只能通过Object.defineProperty来为当前对象添加这个属性。 3、如果原型上就是普通的属性赋值,那么会给当前对象增加一个属性 4、在原型链上使用 defineProperty() 方法添加属性后,实例如果需要添加同名属性则也要用 defineProperty() 方法。
查看全部 -
注意: 1. 用for-in遍历时,原型链上的属性也会被遍历到,而且是无序遍历。 2. 属性删除用delete, prototype属性不可被删除;var定义的变量也不可用delete删除,函数也不可以被delete掉(经验证,不同的内核实现方式不同,在chrome下不可被delete掉,返回false,但在firefox和IE10下可以被delete掉,返回true,对于函数也是相同的结果)
查看全部 -
所有函数x都有prototype属性,且这个属性是一个对象。 且x.prototype也有原型即Object.prototype。 注意这个原型里有一些默认的方法。 查找属性是按原型链 自下向上 查找。 所以如果下 和 上 有相同的属性名,那么肯定是下的起作用。 删除属性:delete 对象名.属性名 三种构造对象的方法如下: var obj={z:78,y:"asd",o:{oo:"ooo"}}; obj.x="123"; function wc(){}; var ko=new wc(); ko.t=123; var haha=Object.create({x:12,y:"nini"});
查看全部 -
对象构造: 除了本身被赋予的值之外,对象还有几个隐藏标签: proto:对象的对象属性prototype上的赋值 class:对象的种类 extensible:是否允许该对象继续增加新的属性 另外对象的值(如 x=1),也有对应的属性或方法,提供一些访问权限的控制 writable:是否可写 enumerable:是否能被删除 configurable:是否能够枚举 value:值 get/set:
查看全部 -
JS的严格模式: 定义和优点:严格模式是一种特殊的执行模式,它修复了部分语言上的不足(禁用with),提供了更强的错误检查(重复属性,删除delete不可配置的属性等),并增强了安全性(在eval中使用独立作用域等); 模式的使用: (1)function func(){'use strict';}好处:向上兼容 (2)'use strict'; function func(){}指定整个js内的代码都是在严格模式下 与普通模式的区别: 在严格模式下,①不允许使用with;②不允许未声明的变量被赋值③arguments变为参数的静态副本,不管参数传与不传,对arguments无影响,但是对象的属性除外;④delete参数,函数名报错⑤delete不可配置的属性报错⑥对象字面量重复属性名报错⑦禁止八进制字面量⑧eval,arguments变为关键字,不能作为变量、函数名⑨eval变为独立作用域,其它地方不可以拿到eval的值;
查看全部 -
注意: 1.顺序不确定,for - in 中遍历的属性并非一定按定义时的顺序,受引擎的影响 2.enumerable 为 false 时的属性将不会出现 3.for - in 对象属性时受原型链影响,若obj 的原型链上有z属性,在遍历时z 也会出现
查看全部 -
try语句如果抛出异常,则执行catch语句,否则不执行,无论有没有异常,都执行finally语句;try语句必须跟catch或finally语句中至少一个组合使用。 try catch语句的嵌套语句执行顺序: 1)如果内部嵌套的try语句抛出异常,但内部没有相配套的catch语句,先执行内部的finally语句,然后跳到最近一层的catch语句执行。 2)如果内部嵌套的try语句抛出异常,内部有相配套的catch语句,先执行此语句处理异常,再执行内部的finally语句。不会再在外部处理异常。 3)如果内部嵌套的try语句抛出异常,内部有相配套的catch语句,并且catch语句也抛出异常,如果内部的catch语句有对异常的处理,先执行异常处理语句,然后执行内部的finally语句,最后执行离内部catch语句抛出异常最近一层的catch语句处理异常。
查看全部 -
以{}组成块block,常用于for循环和if判断语句中,要注意没有块级作用域,比如for循环中var i=0;写在()内和写在for循环外面是一样的;还是属于全局变量; 在函数内定义 var a=b=1;会隐式定义出全局变量b;在函数外获取不到a,为undefined,但可以获取到b 在ES6面世之后有了let,即开始有了块级作用域
查看全部 -
特殊运算符的种类: 1、条件运算符 c?a:b c为true 则取a,否则取b 2、逗号运算符 a,b 例如 var s = (1,2,3),则s依次赋值,最后输出为3 3、delete运算符 delete obj.x 删除对象obj中的x属性 在IE9下,obj中必须configurable:true 才可以删除,否则无效 4、in运算符 判断obj是否有值或window里是否有变量,返回布尔值 例如 attr in json 或 'document' in window 5、instanceof 判断对象类型 {} instanceof Object // true(返回布尔值) 6、new运算符 创建一个新对象 new obj / new array ... 7、this对象 全局用指向window,函数内指向函数本身,浮动指针 8、typeof 判断对象,返回对象类型 例如 typeof 100 === 'number' // true(判断对应类型字符串) 9、void 一元的,判断所有值,返回均为undefined 一般delete 运算符可以删除对象的属性,而如果使用方法Object.defineProperty(对象,'属性',{configurable:false})处理了对象,该属性就不会被删除,反之ture就是可以被删除。
查看全部 -
1. 原始表达式 //常量、直接量、关键字、变量 3.14、"test"、null、i、k、j 2. 初始化表达式 //[1,2]、{x:1, y:2} 3. 函数表达式 //var fe = function(){}、(function(){})() 4. 属性访问表达式 //var o = {x:1}、o.x、o['x'] 5. 调用表达式 //func() 6. 对象创建表达式 //new Func(1,2)、new Object
查看全部 -
类型检测 typeof 会返回一个字符串,适合函数判断和基本类型的判断(特殊null返回的数据类型是“object”) instanceof判断对象类型,但是不同的window和iframe对象类型检测不能用 Object.prototype.toString.apply([]) === "[object.Array]"//在IE6,7,8下,对null和undefined检测失效
查看全部 -
当尝试以对象的方式使用一个String基本类型的时候,比如访问这个字符串的length属性或者增加一些属性,javascript会智能地把这个基本类型转换成一个包装类型对象。当设置完成后,这个临时对象会被销毁掉。所以再次访问该属性,就是undefined。Number Boolean 等同理。
查看全部
举报