>  기사  >  웹 프론트엔드  >  js 객체에 대한 깊은 이해

js 객체에 대한 깊은 이해

小云云
小云云원래의
2018-03-28 16:57:391393검색


이 글은 주로 js 객체에 대한 심층적인 이해를 여러분과 공유합니다. 주로 텍스트와 결합된 코드를 사용하여 여러분과 공유합니다.

객체 생성

直接量:let obj={x:1};
//具有prototype属性new方式:let obj=new Array();
//具有protope属性Object方法:Object.create(原型);

객체 속성 쿼리 및 설정

let obj={x:1,y:2};
obj.x//1obj["y"]//2

ps: 객체의 존재하지 않는 속성을 쿼리하면 객체의 자체 속성이나 상속된 속성에서 대상 속성을 찾을 수 없는 경우 오류가 보고되지 않습니다. access 표현식은 정의되지 않은 상태를 반환합니다. 그러나 존재하지 않는 객체를 쿼리하면 오류가 보고됩니다.

Delete object attribute

let book={name:"黑洞",author:"nd"};delete book.name;
//对象不存在name属性delete book[author];
//对象不存在author属性

delete: 객체에서 속성의 연결을 끊을 뿐이며 프로토타입에서 자체 속성만 삭제할 수 있습니다.

객체 감지 속성

//继承const inherit=p=>{    if(p==null)throw TypeError();//p是一个对象但不能是null
    if(Object.create)return Object.create(p);//如果Object.create()存在直接使用它
    let t=typeof p;//进一步检验
    if(t!="object"&&t!=="function")throw TypeError();//检验
    function f(){};//定义一个空的构造函数
    f.prototype=p;//将其原型属性设置为p
    return new f();//}//in运算符(对象的自有属性和继承属性)let o={x:1}
console.log("x" in o)
console.log("y" in o)
console.log("toString" in o)//hasOwnProperty()(对象的自有属性(包含不可枚举属性))console.log(o.hasOwnProperty("x"))
console.log(o.hasOwnProperty("y"))
console.log(o.hasOwnProperty("toString"))//propertyIsEnumerable()(对象的自有属性且可枚举)let obj=inherit({y:2})
obj.x=1;
console.log(obj.propertyIsEnumerable("x"));
console.log(obj.propertyIsEnumerable("y")

열거 객체 속성

let obj=Object.create({x:1});//for/in
//(所有可枚举的自有属性与继承属性)for(item in obj){   
 //属性名赋值给循环变量}//Object.keys()
 //(对象的可枚举自有属性)Object.keys(obj)
 //返回一个数组,数组是由对象的属性组成的
 //Object.getOwnPropertyName()
 //(所有对象的自有属性,包括不可枚举属性)Object.getOwnPropertyName(obj)

Js의 데이터 속성 및 접근자 속성

javaScript에서 객체의 속성은 데이터 속성과 접근자 속성의 두 가지 유형으로 나뉩니다.

1. 데이터 속성

1. 데이터 속성: 데이터 값을 읽고 쓸 수 있는 위치를 포함합니다.

2. 데이터 속성에는 다음과 같은 네 가지 특성이 있습니다.

configurable: 삭제를 통해 속성을 삭제하여 속성을 재정의할 수 있는지 여부, 속성의 특성을 수정할 수 있는지 또는 속성을 다음과 같이 수정할 수 있는지 여부를 나타냅니다. accessor 속성의 기본값은 true입니다.

enumerable: for-in 루프를 통해 속성을 반환할 수 있는지 여부를 나타냅니다.

writable: 속성 값을 수정할 수 있는지 여부를 나타냅니다.

value: 속성의 데이터 값을 포함합니다. 기본값은 정의되지 않음

다음 예와 같습니다. 사람 객체를 생성하고 이름 속성

let person={name:"johe",age:12};
console.log(Object.getOwnPropertyDescriptor(person,"name"))

3의 기본값을 인쇄합니다. 데이터 속성의 기본 특성을 수정합니다

속성 속성의 기본 특성을 수정하려면 , Object .defineProperty() 메서드를 사용해야 합니다. 이 메서드에는 속성이 있는 개체, 속성 이름 및 설명자 개체라는 세 가지 매개 변수가 있습니다.

이 방법을 통해 속성의 네 가지 특성을 수정할 수 있습니다.

예를 들어 바로 위의 penson 객체에서 name 속성의 특성을 수정하면:

    //修改数据属性
    let person={name:"johe",age:12};
    Object.defineProperty(person,"name",{value:"aa",writable:false,enumerable:false,configurable:false})

2.Accessor 속성

1. 이 속성에는 데이터 값이 포함되지 않지만 get과 set.Method, 접근자 속성을 읽고 쓸 때 작업은 이 두 가지 메서드를 통해 처리됩니다.

2. 접근자 속성에는 네 가지 특성이 있습니다.

configurable: 삭제를 통해 속성을 삭제하여 속성을 재정의할 수 있는지, 속성의 속성을 수정할 수 있는지 또는 속성을 접근자 속성으로 수정할 수 있는지 여부를 나타냅니다. 기본값은 false입니다.

enumerable: for-in 루프를 통해 속성을 반환할 수 있는지 여부를 나타냅니다. 기본값은 false입니다.

Get: 속성을 읽을 때 호출되는 함수, 기본값은 정의되지 않습니다.

Set: 함수 속성을 작성할 때 호출되는 기본값은 정의되지 않습니다

여기서 접근자 속성은 직접 정의할 수 없고 Object.defineProperty() 메서드를 통해 정의해야 한다는 점에 유의해야 합니다.

다음은 접속자 개체 책을 생성한 다음 해당 연도 접속자 속성의 기능 설명을 인쇄하고 해당 방법을 테스트하는 예입니다.
js 객체에 대한 깊은 이해
실행 결과:
js 객체에 대한 깊은 이해
다른 두 기능은 구성 및 열거 가능합니다. 테스트 방법 데이터 속성을 참조할 수 있습니다. 그러나 이 특별 설명에서는 구성 가능한 기능과 관련하여 접근자 속성의 이

기능의 기본값이 false이므로 프로그램이 나중에 속성에 대해 삭제 작업을 수행해야 하는 경우 접근자 속성을 정의할 때 다음을 추가하세요. 이 기능을 true로 설정하세요. 그렇지 않으면 나중에 오류 문제가 발생할 수 있습니다.

객체의 세 가지 속성

1. Prototype 속성
Object.getPrototypeOf()는 객체의 프로토타입을 볼 수 있습니다(권장되지 않음)
i'sPrototyOf()(권장)
2.classof()에 적용. 개체의 클래스 속성 결정
3. 확장성
Object.esExtensible()

직렬화된 개체

let o={x:1,y:{z:[false,null,'']}};let s=JSON.stringfy(o);let p=JSON.parse(s);

                                                                                   개체 생성

                                                                                                                                대상 속성이 개체의 자체 속성이나 상속된 속성에서 발견되지 않으면 오류가 보고되지 않습니다. , 속성 액세스 표현식은 정의되지 않은 값을 반환합니다. 그러나 존재하지 않는 객체를 쿼리하면 오류가 보고됩니다.

Delete object Properties

直接量:let obj={x:1};//具有prototype属性new方式:let obj=new Array();//具有protope属性Object方法:Object.create(原型);//

delete: 객체에서 속성의 연결을 끊으면 자체 속성만 삭제할 수 있습니다.

객체 속성 감지

let obj={x:1,y:2};
obj.x//1obj["y"]//2

객체 속성 열거

let book={name:"黑洞",author:"nd"};delete book.name;//对象不存在name属性delete book[author];//对象不存在author属性

Js의 데이터 속성 및 접근자 속성

javaScript에서 객체의 속성은 데이터 속성과 접근자 속성의 두 가지 유형으로 나뉩니다.

1. 데이터 속성

1. 데이터 속성: 데이터 값을 읽고 쓸 수 있는 위치를 포함합니다.

2. 데이터 속성에는 다음 네 가지 특성이 포함됩니다.

configurable: 삭제를 통해 속성을 삭제하여 속성을 재정의할 수 있는지 여부, 속성의 특성을 수정할 수 있는지 여부 또는 속성을 다음과 같이 수정할 수 있는지 여부를 나타냅니다. accessor 속성의 기본값은 true입니다.

enumerable: for-in 루프를 통해 속성을 반환할 수 있는지 여부를 나타냅니다.

writable: 속성 값을 수정할 수 있는지 여부를 나타냅니다.

value: 속성의 데이터 값을 포함합니다. 기본값은 정의되지 않았습니다

如下面这个例子:创建一个对象person,打印出name属性的特性的默认值

let person={name:"johe",age:12};
console.log(Object.getOwnPropertyDescriptor(person,"name"))

3.修改数据属性的默认特性

修改属性属性的默认特性要用到一个方法:Object.defineProperty()方法,这个方法有三个参数:属性所在的对象,属性名,一个描述符对象。

通过这个方法,我们可以来修改一个属性的这4个特性。

如我们对刚刚上面的penson对象里面的name属性的特性进行修改:

    //修改数据属性
    let person={name:"johe",age:12};
    Object.defineProperty(person,"name",{value:"aa",writable:false,enumerable:false,configurable:false})

2.访问器属性

1.访问器属性:这个属性不包含数据值,包含的是一对get和set方法,在读写访问器属性时,就是通过这两个方法来进行操作处理的。

2.访问器属性包含的四个特性:

configurable:表示能否通过delete删除属性从而重新定义属性,能否修改属性的特性,或能否把属性修改为访问器属性,默认为false

enumerable:表示能否通过for-in循环返回属性,默认为false

Get:在读取属性时调用的函数,默认值为undefined

Set:在写入属性时调用的函数,默认值为undefined

这里要注意下,访问器属性不能直接定义,要通过Object.defineProperty()这个方法来定义。

下面来个例子,创建一个访问器对象book,接着打印出其year访问器属性的特性描述并对其方法进行测试打印:
js 객체에 대한 깊은 이해
执行结果:
js 객체에 대한 깊은 이해
其他两个特性configurable,enumerable的测试方式可以参照数据属性的。不过在这特别说明下,关于configurable这个特性,因为访问器属性里面这个

特性默认值为false,如果程序后面需要对该属性进行delete操作等,那就在定义访问器属性时,将这个特性设置为true,不然这个会导致后面一些报错的问题。

对象的三个属性

1.原型属性
Object.getPrototypeOf()可以查看对象的原型 (不推荐使用)
i’sPrototyOf()(推荐使用)
2.类属性
适应classof()来判断对象的类属性
3.可拓展性
Object.esExtensible()

序列化对象

let o={x:1,y:{z:[false,null,'']}};let s=JSON.stringfy(o);let p=JSON.parse(s);

위 내용은 js 객체에 대한 깊은 이해의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.