-
特殊运算符
查看全部 -
hasOwnProperty()
函数用于指示一个对象自身(不包括原型链)是否具有指定名称的属性。如果有,返回true
,否则返回false
。查看全部 -
自定义序列化
其他对象方法
查看全部 -
extensible标签
isExtensible可扩展、
preventExtensions阻止扩展(没有改变属性标签的值)
<script type="text/javascript">
var obj = {x:1,y:2};
Object.isExtensible(obj); //isExtensible 可扩展的
obj.z=3; //将 z=3添加进对象obj中
console.log(JSON.stringify(obj)); //查看,z已添加进来了
Object.preventExtensions(obj); //preventExtensions 阻止扩展
obj.a=4; //将 a=4添加进对象obj中
console.log(JSON.stringify(obj)); //查看,a不能添加进来
//查看对象的属性标签,都是默认值。preventExtensions阻止扩展后,并没有让属性标签发生改变。
var p1 = Object.getOwnPropertyDescriptor(obj,"x");
console.log(JSON.stringify(p1));
//输出{"value":1,"writable":true,"enumerable":true,"configurable":true}
//seal()方法在preventExtensions基础上阻止扩展,区别在于configurable为false
//属性标签不可配置、不能添加新属性、不能删除属性
Object.seal(obj);
var p2 = Object.getOwnPropertyDescriptor(obj,"x");
console.log(JSON.stringify(p2));
//输出{"value":1,"writable":true,"enumerable":true,"configurable":false}
Object.isSealed(obj); //true 判断对象obj是否被隐藏
//freeze()方法,比seal()强度更高,更严格。
//既不可配置,不能添加删除属性,也不能修改属性值。configurable为false,writable也为false。
Object.freeze(obj);
var p3 = Object.getOwnPropertyDescriptor(obj,"x");
console.log(JSON.stringify(p3));
Object.isFrozen(obj); //true 判断对象是否被冻结
</script>
查看全部 -
对象的类型 class
查看全部 -
1、创建属性标签的方法: defineProperty(参数1-对象,参数2-属性名,参数3-具体每个属性的值)
2、创建多个属性标签的方法: defineProperties(参数1-对象,参数2-每个属性都是对象)
3、访问所有属性标签的方法: getOwnPropertyDescriptor(对象,属性名)
4、属性里可以添加get/set方法
5、总结
查看全部 -
JS的严格模式:
定义和优点:严格模式是一种特殊的执行模式,它修复了部分语言上的不足(禁用with),提供了更强的错误检查(重复属性,删除delete不可配置的属性等),并增强了安全性(在eval中使用独立作用域等);
模式的使用:
(1)function func(){'use strict';}好处:向上兼容
(2)'use strict'; function func(){}指定整个js内的代码都是在严格模式下
与普通模式的区别:
在严格模式下,①不允许使用with;②不允许未声明的变量被赋值③arguments变为参数的静态副本,不管参数传与不传,对arguments无影响,但是对象的属性除外;④delete参数,函数名报错⑤delete不可配置的属性报错⑥对象字面量重复属性名报错⑦禁止八进制字面量⑧eval,arguments变为关键字,不能作为变量、函数名⑨eval变为独立作用域,其它地方不可以拿到eval的值;查看全部 -
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语句处理异常。查看全部 -
js中6型数据类型:弱类型特性
5种原始类型:number(数字)、string(字符串)、boolean(布尔值)、null 、undefined
1种对象类型:object对象(函数function(Math) ,array, Date,字符串,数值,浏览器对象,DOM对象)查看全部 -
<script type="text/javascript">
var o = {};
//在o的原型上创建x属性,值为100。默认其他属性为false。
//如writable=false, configurable=false
Object.defineProperty(o,'x',{
value: 100
});
var obj = Object.create(o); //以字面量对象o为原型创建一个对象obj,得用Object.create()方法
console.log(obj.x);
obj.x = 99; //默认writable=false
console.log(obj.x); //所以输出的是默认值100,不是99
delete obj.x; //默认configurable=false不可配置
console.log(obj.x); //所以x没有被删掉,仍然输出默认值100
//如果要在obj对象上设置x,覆盖原型链上的x值,必须将writable和configurable设置为true
Object.defineProperty(obj,'x',{
value: 10,
writable: true,
configurable: true
});
console.log(obj.x); //输出10
obj.x = 9; //更改对象上的x
console.log(obj.x); //输出9
delete obj.x; //删除掉对象上的x,只剩原型链上的x
console.log(obj.x); //所以输出100
</script>
查看全部 -
<script type="text/javascript">
function foo(){}; //创建一个空函数foo(),foo原型上有prototype对象
//通过 defineProperty,在prototype对象上创建一个z属性,再给z添加get方法,返回值为 1
Object.defineProperty(foo.prototype,'z',{
get:function(){
return 1;
}
});
var obj = new foo(); //以foo为原型创建对象obj
console.log(obj.z); //输出1,z在原型链foo.prototype上
obj.z = 100; //仍然输出1,因为原型链foo.prototype上的z有get()或set()方法,
console.log(obj.z); //所以不能在obj对象上创建z属性,所以输出的仍是原型链上z的值1
delete obj.z; //不能删除原型链上的z
console.log(obj.z); //所以输出的仍是1
//如果要在obj对象上创建z属性,需要设置configurable为true,其他没有设置的属性默认为false
Object.defineProperty(obj,'z',{
value: 100,
writable: false, //不可写的
configurable: true //可配置的
});
console.log(obj.z); //输出默认值100
obj.z = 99; //上面设置writable为false,表示z的属性值不可改写
console.log(obj.z); //所以不会输出99,仍是100
delete obj.z; //上面设置了可配置属性,所以能删除
console.log(obj.z); //删除obj对象上的z后,输出的是原型链上的z值1
</script>
查看全部 -
get、set与原型链
查看全部 -
查看全部
-
开始查看全部
-
java中级查看全部
举报