JavaScript 는 대상 의 속성 을 깊이 이해 합 니 다.
목차
1. 소개: 속성 을 설명 하 는 명명 방식, 경로 찾기 및 분류
2. 속성의 접근 방식: '접근 방식', '[]' 중 괄호 접근 방식 소개
3. 속성 삭제: delete 키 워드 를 통 해 대상 의 속성 을 삭제 합 니 다.
4. 검 측 속성: 특정한 속성 이 대상 인지 아 닌 지 를 판단 하 는 세 가지 인 스 턴 스 속성 을 소개 합 니 다: in, obj. hasOwnProperty, obj. property IsEnumerable
5. 스 트 리밍 속성: 세 가지 스 트 리밍 대상 의 속성 을 소개 합 니 다: for / in 구문 블록, Object. keys (obj), Object. getOwnProperty Names (obj)
6. 속성 특성: Escript 5 에 속성 특성 이 추가 되 었 습 니 다. 속성 을 매 거 할 수 있 는 지, 수정 할 수 있 는 지 등 을 설정 할 수 있 습 니 다.
1. 소개
1.1 설명
속성, 대상 의 구성원 을 가리 키 며 '속성' (필드) 뿐만 아니 라 방법 도 포함 되 어 있 습 니 다.
1.2 명명 방식
속성 이름 은 영문 문자, 숫자 (시작 할 수 없 음), 특수 기호 (예: -,, $등) 를 포함 할 수 있 습 니 다.
그러나 일반 영어 문 자 를 사용 하여 특수 한 상황 에서 - (가로 줄: - webkit -, - moz - )그리고
속성 이름 에 - (가로 줄) 이 포함 되 어 있 으 면 속성 접근 방식 은 '[]' 중 괄호 로 만 접근 할 수 있 습 니 다.
var o = {
x: 1,
y: 2,
'-x': 3,
'-showX': function () {
alert(this.x);
}
}
// o.-x; //
console.log(o['-x']); // => 3 : -( ) , '[ ]'
o['-showX'](); // => 1 : -( ),
1.3 속성 찾기 경로
대상 의 속성 x 를 읽 으 려 면 먼저 이 대상 의 인 스 턴 스 속성 에서 찾 습 니 다. 찾 지 못 하면 이 대상 의 원형 대상 에서 속성 x 를 찾 습 니 다. 원형 대상 에 도 속성 x 가 없 으 면 이 원형 대상 의 원형 (원형 대상 이 원형 을 포함 하고 있다 고 가정) 을 계속 찾 습 니 다. 속성 x 나 원형 이 없 을 때 까지 찾 습 니 다.
1.4 속성의 분류
대상 중의 속성 은 자신의 속성 여부 에 따라 자체 속성 과 계승 속성 으로 나 눌 수 있 습 니 다.
① 자체 속성: 인 스 턴 스 속성 이 라 고도 할 수 있 고 대상 자체 의 속성 을 말한다.
② 상속 속성: 원형 속성 이 라 고도 할 수 있 으 며 대상 이 원형 에서 계승 하 는 속성 을 말한다.
2. 속성의 접근 방식
'점 접근 방식 과' [] '중 괄호 방법 으로 나 눌 수 있 습 니 다.
설명: 존재 하지 않 는 속성 을 읽 으 면 undefined 로 돌아 갑 니 다. 대상 이 존재 하지 않 는 속성 을 설정 하면 대상 에 게 이 속성 을 추가 합 니 다.
2.1 '점 접근 방식
문법: obj. propertyName
설명: 속성 이름 은 표시 자 (정적 문자열) 여야 하 며 변수 가 될 수 없습니다.
예시:
var o = {};
o.x = '1';
2.2 '[]' 중 괄호 접근 방식
문법: obj [propertyName]
설명: 속성 이름 은 정적 문자열 일 수도 있 고 변수 일 수도 있 습 니 다. 변수 라면 접근 하 는 속성 은 변수 가 표시 하 는 값 입 니 다.
특징: '' 접근 방식 과 달리 '[]' 에서 괄호 접근 방식 의 유연성 이 매우 크다. 동적 접근 가능 (변수 지정 속성 명), 특정 특수 문 자 를 포함 하 는 속성 에 접근 할 수 있다 (예 를 들 어 속성 이름 띠 '-')
예시:
var o = { x: 1, y: 2 };
console.log(o['x']); // => 1 : x
var a = 'y';
console.log(o[a]); // => 2 : y ( a )
3. 삭제 속성
문법: delete obj. propertyName 또는 delete obj[propertyName]
설명: delete 는 대상 의 자체 속성 만 삭제 할 수 있 고 계승 속성 은 삭제 할 수 없습니다.
예시:
var o = {};
o.x = '1';
console.log(o.x); // => 1
delete o.x;
console.log(o.x); // => undefined : , undefined
o.constructor.prototype.y = '2'; // y
console.log(o.y); // => 2
delete o.y; // y
console.log(o.y); // => 2 : y
4. 속성 검사
대상 이 어떤 속성 을 포함 하고 있 는 지 검사 합 니 다.
4.1 연산 자
설명: 대상 이 특정한 속성 을 포함 하 는 지 판단 하고 대상 의 인 스 턴 스 속성, 계승 속성 에서 검 측 합 니 다.
문법: propertyName in obj
반환 값:
{bool} 대상 의 인 스 턴 스 속성 이나 계승 이 이 속성 을 포함 하 는 지 판단 합 니 다.
true: 대상 의 인 스 턴 스 속성 이나 계승 속성 은 이 속성 을 포함 합 니 다.
false: 대상 의 인 스 턴 스 속성 이나 계승 속성 은 이 속성 을 포함 하지 않 습 니 다.
예시:
function People(name) {
this.name = name;
}
function Student(age) {
this.age = age;
}
Student.prototype = new People(); // Student People
var s = new Student(22);
console.log('age' in s); // => true :age
console.log('name' in s); // => true :name
console.log('address' in s); // => false :address , false
4.2 obj.hasOwnProperty(propertyName)
설명: 대상 이 지정 한 이름 의 인 스 턴 스 속성 을 가지 고 있 는 지 판단 하고 계승 속성 을 검사 하지 않 습 니 다.
인자:
① property Name {string}: 속성 이름.
문법: obj. hasOwnProperty (propertyName)
반환 값:
{bool} 대상 이 지정 한 이름 의 인 스 턴 스 속성 을 가지 고 있 는 지 판단 합 니 다. 이 방법 은 대상 원형 체인 의 속성 을 검사 하지 않 습 니 다.
true: 속성 이 대상 인 인 스 턴 스 속성, 비 계승.
false: 속성 이 대상 이 아 닌 인 스 턴 스 속성 입 니 다.
예시:
var Student = function (name) {
this.name = name;
};
// Student sayHello
Student.prototype.sayHello = function () {
alert('Hello,' + this.name);
}
// Student age
Student.prototype.age = '';
var st = new Student(' '); // st
console.log(st.hasOwnProperty('name')); // => true : , this.name
console.log(st.hasOwnProperty('sayHello')); // => false :sayHello
console.log(st.hasOwnProperty('age')); // => false :age
4.3 obj.propertyIsEnumerable(propertyName)
설명: 지정 한 이름 의 속성 이 인 스 턴 스 속성 인지, 매 거 진 것 인지 판단 합 니 다 (for / in 순환 매 거 진 사용 가능)
인자:
① property Name {string}: 속성 이름.
문법: obj. propertyIsEnumerable (propertyName)
반환 값:
{bool} 속성 이 인 스 턴 스 속성 인지 여 부 를 판단 하고 매 거 진 (for / in 순환 매 거 진 사용 가능) 입 니 다. 원형 체인 의 구성원 을 고려 하지 않 습 니 다.
true: 속성 이 대상 의 인 스 턴 스 속성 이 며 매 거 진 것 입 니 다.
false: 속성 이 대상 이 아 닌 인 스 턴 스 속성 이나 셀 수 없 는 것.
예시:
var o = Object.create({}, {
name: {
value: 'tom',
enumerable: true //
},
age: {
value: 22,
enumerable: false //
}
});
console.log(o.propertyIsEnumerable('name')); // => true :name
console.log(o.propertyIsEnumerable('age')); // => false :age
console.log(o.hasOwnProperty('age')); // => true :hasOwnProperty()
4.4 총화
검사 방식
문법
속성 범위 검출
반환 값
연산 자
propertyName in obj
인 스 턴 스 속성, 계승 속성
{bool} true: 조건 에 부합 되 며, fasle: 일치 하지 않 습 니 다.
obj.hasOwnProperty(propertyName)
obj.hasOwnProperty(propertyName)
인 스 턴 스 속성
{bool} true: 조건 에 부합 되 지 않 음; fasle: 부합 되 지 않 음
obj.propertyIsEnumerable(propertyName)
obj.propertyIsEnumerable(propertyName)
매 거 진 실례 속성
{bool} true: 조건 에 부합 되 지 않 음; fasle: 부합 되 지 않 음
5. 스 트 리밍 속성
대상 의 인 스 턴 스 속성, 계승 속성 을 옮 겨 다 니 는 것 입 니 다.
5.1 for / in 구문 블록
설명: 대상 을 옮 겨 다 니 며 매 거 진 인 스 턴 스 속성 과 계승 속성
문법:
for (p in obj) {/ p 는 옮 겨 다 니 는 속성 이름 을 표시 합 니 다}
예시:
var po = { px: 1, py: 2 };
var o = { x: 1, y: 2 };
o.__proto__ = po; // o po
for (property in o) {
console.log(property); // => :x、y、px、py
console.log(o[property]); // => ,
}
5.2 Object.keys(obj)
설명: 대상 이 매 거 할 수 있 는 인 스 턴 스 속성 이름 을 포함 하 는 배열 을 되 돌려 줍 니 다.
인자:
①obj {object}: 인 스 턴 스 대상
반환 값:
{Array} 대상 이 매 거 진 인 스 턴 스 속성 이름 을 포함 하 는 배열 을 되 돌려 줍 니 다.
예시:
var po = { px: 1, py: 2 };
var o = { x: 1, y: 2 };
o.__proto__ = po; // o po
var propertyArray = Object.keys(o); // =>
for (var i = 0, len = propertyArray.length; i < len; i++) {
console.log(propertyArray[i]); // => :x、y
}
5.3 Object.getOwnPropertyNames(obj)
설명: 대상 을 포함 하 는 모든 인 스 턴 스 속성 이름 을 되 돌려 줍 니 다. 매 거 진 것 과 매 거 진 것 을 포함 합 니 다.
인자:
①obj {object}: 인 스 턴 스 대상
반환 값:
{Array} 대상 의 모든 인 스 턴 스 속성 이름 을 포함 하 는 배열 을 되 돌려 줍 니 다.
Object. keys () 와 의 차이: Object. keys () 는 매 거 진 인 스 턴 스 속성 만 되 돌려 줍 니 다. Object. getOwnProperty Names () 는 모든 인 스 턴 스 속성 을 되 돌려 줍 니 다.
예시:
var po = { px: 1, py: 2 };
var o = { x: 1, y: 2 };
// o : x , y
Object.defineProperties(o, {
x: {
enumerable: true
},
y: {
enumerable: false
}
});
o.__proto__ = po; // o po
// 1.Object.keys():
var propertyArray = Object.keys(o);
for (var i = 0, len = propertyArray.length; i < len; i++) {
console.log(propertyArray[i]); // => :x
}
// 2.Object.getOwnPropertyNames(): ,
propertyArray = Object.getOwnPropertyNames(o);
for (var i = 0, len = propertyArray.length; i < len; i++) {
console.log(propertyArray[i]); // => :x、y
}
5.4 총화
검사 방식
문법
속성 범위 옮 겨 다 니 기
반환 값
for / in 구문 블록
for (p in obj) {/ p 는 옮 겨 다 니 는 속성 이름 을 표시 합 니 다}
매 거 진 실례 속성 과 계승 속성
{String} 속성의 이름
Object.keys(obj)
Object.keys(obj)
매 거 진 실례 속성
{Array} 대상 이 매 거 진 인 스 턴 스 속성 이름 을 포함 하 는 배열 을 되 돌려 줍 니 다.
Object.getOwnPropertyNames(obj)
Object.getOwnPropertyNames(obj)
대상 을 포함 하 는 모든 인 스 턴 스 속성 이름 입 니 다. 매 거 진 것 과 매 거 진 것 을 포함 합 니 다.
{Array} 대상 의 모든 인 스 턴 스 속성 이름 을 포함 하 는 배열 을 되 돌려 줍 니 다.
6. 속성 설명자
데이터 속성 과 접근 기 속성 으로 나 뉜 다.
둘 은 서로 변환 할 수 있 습 니 다. 변환 후 enumerable 과 configurable 특성 (두 가지 속성 설명 자 는 모두 이 두 가지 특성 을 포함 합 니 다) 을 설정 하지 않 으 면 기본적으로 변환 전의 값 을 사용 합 니 다.
6.1 데이터 속성
설명: 속성 을 포함 하 는 조작 특성; 예 를 들 어 설정 값, 매 거 진 여부 등
특성 이름
묘사 하 다.
기본 값
value
속성 값 설정
undefined
writable
속성의 값 을 수정 할 수 있 습 니까? true: 속성의 값 을 수정 할 수 있 습 니 다. false: 속성의 값 을 수정 할 수 없습니다.
false
enumerable
속성 을 매 거 할 수 있 는 지 여부; true: 매 거 할 수 있 습 니 다. for / in 문 구 를 통 해 속성 을 매 거 할 수 있 습 니 다. false: 매 거 할 수 없습니다.
false
configurable
속성의 특성 을 수정 할 수 있 는 지 여부; true: 속성의 특성 을 수정 할 수 있 습 니 다 (예 를 들 어 writable 을 false 에서 true 로 변경). false: 속성의 특성 을 수정 할 수 없습니다.
false
기본 값:
1) Object. defineProperty, Object. defineProperties 또는 Object. create 함 수 를 사용 한 경우 데이터 속성 을 추가 합 니 다. writable, enumerable, configurable 기본 값 은 false 입 니 다.
2) 대상 이 직접 만 든 속성 을 사용 합 니 다. writable, enumerable, configurable 기능 은 기본적으로 true 입 니 다.
예시:
// 1) ; true
var o1 = {
name: 'tom'
};
console.log(Object.getOwnPropertyDescriptor(o1, 'name')); // => Object {value: "tom", writable: true, enumerable: true, configurable: true}
// 2) Object.create , false
var o2 = Object.create(null, {
name: {value:'tom'}
});
console.log(Object.getOwnPropertyDescriptor(o2, 'name')); // => Object {value: "tom", writable: false, enumerable: false, configurable: false}
6.2 접근 기 속성
설명: 속성 을 설정 하 는 접근 방식;set, get 특성 등
특성 이름
묘사 하 다.
기본 값
get
속성의 반환 값 함수
undefined
set
속성의 설정 값 함수;할당 인자 포함
undefined
enumerable
매 거 속성 여부;true: 매 거 할 수 있 습 니 다. for / in 문 구 를 통 해 속성 을 매 거 할 수 있 습 니 다.false: 셀 수 없 음
false
configurable
속성의 특성 을 수정 할 수 있 는 지 여부;true: 속성의 특성 을 수정 할 수 있 습 니 다. (예 를 들 어 writable 을 false 에서 true 로 바 꿀 수 있 습 니 다.)false: 속성의 특성 을 수정 할 수 없습니다.
false
예시:
var obj = {};
// ,
Object.defineProperty(obj, "name", {
get: function () {
return this._name; // get set , : name,get set _name
},
set: function (x) {
if (isNaN(x)) {
this._name = x;
} else {
this._name = 'name ';
}
},
enumerable: true,
configurable: true
});
console.log(Object.getOwnPropertyDescriptor(obj, 'name')); // => Object {get: function, set: function, enumerable: true, configurable: true}
obj.name = '12';
console.log(obj.name); // => name
End
웹 개발 의 길 시리즈
메뉴 불 러 오 는 중...
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.