>웹 프론트엔드 >프런트엔드 Q&A >객체.할당()을 사용하는 방법

객체.할당()을 사용하는 방법

青灯夜游
青灯夜游원래의
2023-01-06 16:34:505370검색

object.ass() 메소드는 하나 이상의 소스 객체(sources)의 모든 열거 가능한 속성 값을 대상 객체(target)에 할당하고 대상 객체 구문 "Object.ass()을 반환하는 데 사용됩니다. target, ..sources)"에서 "target" 매개변수는 소스 개체의 속성을 받는 개체이자 수정된 반환 값이기도 한 대상 개체를 나타냅니다. 매개변수 "sources"는 소스를 나타냅니다. 병합될 속성이 포함된 개체입니다.

객체.할당()을 사용하는 방법

이 튜토리얼의 운영 환경: Windows 7 시스템, JavaScript 버전 1.8.5, Dell G3 컴퓨터.

Object.sign() Usage

이 메소드는 하나 이상의 소스 객체(sources)의 모든 열거 가능한 속성 값을 대상 객체(target)에 할당하고 대상 객체를 반환하는 데 사용됩니다. .

Object.assign(target, ...sources)

target: 대상 객체, 소스 객체의 속성을 받는 객체이자 수정된 반환 값이기도 합니다.

sources: 병합될 속성이 포함된 소스 개체입니다.

1. 객체의 복사본

const target = { a: 1, b: 2 };
const source1 = { b: 4, c: 5 };
const source2 = { b: 6, c: 7 };
const obj = Object.assign(target,source1,source2);
console.log(obj); // (a: 1, b: 6, c: 7)

참고:
1. 소스 객체의 속성이 대상 객체의 속성과 다르면 대상 객체에 복사됩니다.
2. 만약 대상 개체와 원본 개체의 속성이 동일하면 대상 개체의 속성 값이 원본 개체의 속성 값으로 덮어쓰여집니다.
3. 동일한 속성을 가진 원본 개체가 여러 개 있는 경우, 그러면 대상 개체의 속성이 마지막 소스 개체의 속성으로 덮어쓰여집니다.

2. 상속된 속성과 열거 불가능한 속성은 복사할 수 없습니다.

const obj1 = Object.create({foo: 1}, { // foo 是个继承属性。
    bar: {
        value: 2  // bar 是个不可枚举属性。
    },
    baz: {
        value: 3,
        enumerable: true  // baz 是个自身可枚举属性。
    }
});
const obj= Object.assign({}, obj1);
console.log(obj); // { baz: 3 }
//创建对象时,如果没有设置enumerable的值,默认为false(不可枚举属性),设置为true,则为可枚举属性

참고: Object.sign 메소드는 소스 객체의 고유하고 열거 가능한 속성만 대상 객체에 복사합니다. 상속되고 열거 불가능한 속성입니다. 속성 언급된 속성은 복사되지 않습니다.

3. 객체의 전체 복사

Object.sign() 복사는 원본 객체의 속성 값이 객체 obj인 경우 복사됩니다. 객체값의 포인터(즉, 주소), 이때 obj의 값이 수정되면 대상객체가 영향을 받게 된다.
이 효과를 피하려면 객체의 전체 복사본을 만들어야 합니다.

let obj1 = { a: 1, b: {c: 2 }};
let obj2 = { d: 2 };
let obj = Object.assign(obj2,JSON.parse(JSON.stringify(obj1)));
console.log(obj); // { d: 2, a:1, b:{ c:2 }}
obj1.b.c = 4;
console.log(obj); // { d: 2, a:1, b:{ c:2 }}
// 对象obj1.b.c 值的变化则不会再影响到目标对象 obj 的值。

참고: 깊은 복사는 참조 유형의 값 복사본만 해결할 수 있으며 상속 및 열거 불가능한 속성은 여전히 ​​복사할 수 없습니다.

4. 예외가 발생하면 복사본이 종료됩니다.

const target = Object.defineProperty({}, "foo", {
    value: 1,
    writable: false
}); // target 的 foo 属性是个只读属性。

Object.assign(target, {bar: 2}, {foo2: 3, foo: 3, foo3: 3}, {baz: 4});
// TypeError: "foo" is read-only
// 注意这个异常是在拷贝第二个源对象的第二个属性时发生的。
console.log(target.bar);  // 2,说明第一个源对象拷贝成功了。
console.log(target.foo2); // 3,说明第二个源对象的第一个属性也拷贝成功了。
console.log(target.foo);  // 1,只读属性不能被覆盖,所以第二个源对象的第二个属性拷贝失败了。
console.log(target.foo3); // undefined,异常之后 assign 方法就退出了,第三个属性是不会被拷贝到的。
console.log(target.baz);  // undefined,第三个源对象更是不会被拷贝到的。

5. 원본 유형이 객체로 압축됩니다.

원본 유형이 압축되고 null 및 정의되지 않은 것은 무시됩니다. .

const obj1 = 'aaa';
const obj2 = false;
const obj3 = true;
const obj4 = 10;
const obj= Object.assign(obj1,obj2,obj3,obj4);
console.log(obj); // { 0:'a', 1:'a', 2:'a'}

참고: 문자열의 래퍼 객체만 자체 열거 가능 속성을 가질 수 있습니다.

【추천 학습: javascript 비디오 튜토리얼

위 내용은 객체.할당()을 사용하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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