JavaScript 유 틸 리 티 코드 팁
7355 단어 JavaScript기교.
JSON.stringify
우 리 는 평소에 JSON 대상 을 자주 사용 합 니 다.예 를 들 어 우리 가 대상 의 깊 은 복사 본 을 실현 하려 고 할 때 JSON 대상 의 JSON.stringify 와 JSON.parse 로 똑 같은 대상 을 복사 할 수 있 고 원래 대상 에 대해 어떠한 인용 관 계 를 가지 지 않 습 니 다.localstorage 를 사용 할 때 도 사용 합 니 다.localstorage 는 문자열 형식의 내용 만 저장 할 수 있 기 때문에 저장 하기 전에 수 치 를 JSON 문자열 로 바 꾸 고 꺼 낼 때 대상 이나 배열 로 바 꿉 니 다.
JSON.stringify 방법 에 대해 서 는 대상 이나 배열 을 JSON 문자열 로 변환 하 는 데 도움 을 줄 수 있 습 니 다.우 리 는 보통 그것 의 첫 번 째 매개 변수 만 사용 하 는데,사실은 그것 에 또 다른 두 개의 매개 변수 가 있어 서,그것 으로 하여 금 매우 좋 은 기능 을 실현 하 게 할 수 있다.
먼저 문법 을 봅 시다.
JSON.stringify(value[, replacer [, space]])
인자:함수 필터 사용 및 직렬 화 대상:
// “ ”
function replacer(key, value) {
if (typeof value === "string") {
return undefined;
}
return value;
}
var foo = {
foundation: "Mozilla",
model: "box",
week: 45,
transport: "car",
month: 7
};
var jsonString = JSON.stringify(foo, replacer);
// {"week":45,"month":7}
배열 필터 와 직렬 화 대상 사용 하기:
// “ ”
const user = {
name: 'zollero',
nick: 'z',
skills: ['JavaScript', 'CSS', 'HTML5']
};
JSON.stringify(user, ['name', 'skills'], 2);
// "{
// "name": "zollero",
// "skills": [
// "JavaScript",
// "CSS",
// "HTML5"
// ]
// }"
또 하나의 재 미 있 는 것 은 대상 의 toJSON 속성 이다.대상 이 toJSON 속성 이 있 으 면 직렬 화 될 때 이 대상 을 직렬 화 하지 않 고 toJSON 방법의 반환 값 을 직렬 화 합 니 다.
아래 의 예 를 보십시오.
var obj = {
foo: 'foo',
toJSON: function () {
return 'bar';
}
};
JSON.stringify(obj); // '"bar"'
JSON.stringify({x: obj}); // '{"x":"bar"}'
세트 로 배열 의 무 게 를 실현 합 니 다.ES6 에 새로운 데이터 구조 유형 인 Set 를 도입 했다.한편,set 와 Array 의 구 조 는 매우 유사 하고 set 와 Array 는 서로 전환 할 수 있다.
배열 이 무 거 워 지 는 것 도 비교적 흔히 볼 수 있 는 전단 면접 문제 라 고 할 수 있 습 니 다.방법 은 여러 가지 가 있 습 니 다.여 기 는 군말 이 많 지 않 습 니 다.다음은 set 와...(연산 자 확장)로 간단하게 배열 을 해서 무 게 를 줄 수 있 는 지 살 펴 보 겠 습 니 다.
const removeDuplicateItems = arr => [...new Set(arr)];
removeDuplicateItems([42, 'foo', 42, 'foo', true, true]);
//=> [42, "foo", true]
블록 급 역할 영역 으로 이름 충돌 방지개발 과정 에서 이름 충돌 문제 가 발생 하 는데 장면 에 따라 서로 다른 값 을 정의 하여 같은 변 수 를 부여 해 야 한 다 는 것 이다.이 문 제 를 해결 하기 위해 ES6 의 블록 급 역할 영역 을 사용 하 는 방법 을 소개 한다.
예 를 들 어 switchcase 를 사용 할 때 우 리 는 이렇게 할 수 있다.
switch (record.type) {
case 'added': {
const li = document.createElement('li');
li.textContent = record.name;
li.id = record.id;
fragment.appendChild(li);
break;
}
case 'modified': {
const li = document.getElementById(record.id);
li.textContent = record.name;
break;
}
}
함수 매개 변수 값 검사ES6 에서 함수 에 매개 변수 기본 값 의 특성 을 추가 하고 매개 변수 에 기본 값 을 설정 할 수 있 으 며 코드 를 더욱 간결 하고 유지 할 수 있다 는 것 을 알 고 있 습 니 다.
사실 우 리 는 이 특성 을 통 해 함수 매개 변수 값 의 검 사 를 할 수 있다.
우선,함수 의 매개 변 수 는 임의의 형식의 값 일 수도 있 고 함수 일 수도 있 습 니 다.예 를 들 어 아래 의 이것:
function fix(a = getA()) {
console.log('a', a)
}
function getA() {
console.log('get a')
return 2
}
fix(1);
// a 1
fix();
// get a
// a 2
이 를 통 해 알 수 있 듯 이 fix 를 호출 할 때 인자 a 를 전달 하면 함수 getA 를 실행 하지 않 고 인자 a 를 전달 하지 않 을 때 만 함수 getA 를 실행 할 수 있 습 니 다.이때,우 리 는 이 특성 을 이용 하여 인자 a 에 필수 적 인 검 사 를 추가 할 수 있 습 니 다.코드 는 다음 과 같 습 니 다.
function fix(a = require()) {
console.log('a', a)
}
function require() {
throw new Error(' a')
}
fix(1);
// a 1
fix();
// Uncaught Error: a
해체 할당 으로 대상 속성 필터 링앞에서 JSON.stringify 를 사용 하여 대상 의 속성 을 걸 러 내 는 방법 을 소개 했다.여기 서 우 리 는 ES6 의 해체 할당 과 연산 자의 특성 을 이용 하여 속성 을 걸 러 내 는 다른 방법 을 소개 한다.
예 를 들 어 다음 예제:
// types inner outer
const { inner, outer, ...restProps } = {
inner: 'This is inner',
outer: 'This is outer',
v1: '1',
v2: '2',
v4: '3'
};
console.log(restProps);
// {v1: "1", v2: "2", v4: "3"}
구조 할당 값 으로 포 함 된 대상 의 속성 을 가 져 옵 니 다.재 구성 할당 의 특성 이 매우 강하 다.그것 은 우리 가 원 하 는 것 을 쉽게 얻 을 수 있 도록 해 준다.예 를 들 어 다음 코드:
//
const car = {
model: 'bmw 2018',
engine: {
v6: true,
turbo: true,
vin: 12345
}
};
// ES6 , { vin } { vin: vin }
const modalAndVIN = ({ model, engine: { vin }}) => {
console.log(`model: ${model}, vin: ${vin}`);
}
modalAndVIN(car);
// "model: bmw 2018, vin: 12345"
병합 대상ES6 에 추 가 된 확장 연산 자 는 배열 을 재 구성 할 수도 있 고 대상 을 재 구성 할 수도 있 으 며 대상 의 모든 속성 을 펼 칠 수도 있다.
이 특성 을 통 해 우 리 는 대상 통합 작업 을 할 수 있 습 니 다.다음 과 같 습 니 다.
// ,
const obj1 = { a: 1, b: 2, c: 3 };
const obj2 = { c: 5, d: 9 };
const merged = { ...obj1, ...obj2 };
console.log(merged);
// {a: 1, b: 2, c: 5, d: 9}
const obj3 = { a: 1, b: 2 };
const obj4 = { c: 3, d: { e: 4, ...obj3 } };
console.log(obj4);
// {c: 3, d: {a: 1, b: 2, e: 4} }
사용===대체==JavaScript 에서==과==은 매우 큰 차이 가 있 습 니 다.==은 양쪽 의 변 수 를 전의 한 다음 에 전의 후의 값 을 비교 합 니 다.==은 엄격하게 비교 합 니 다.양쪽 의 변 수 는 값 이 같 을 뿐만 아니 라 자신의 유형 도 같 아야 합 니 다.
자바 스 크 립 트 는 항상 신기 한 언어 로 조롱 당 합 니 다.바로 전의 적 특성 때문에==으로 깊이 묻 힌 bug 를 도입 할 수 있 습 니 다.bug 를 멀리 하 시 겠 습 니까?아니면 사용 하 시 겠 습 니까?
[10] == 10 // true
[10] === 10 // false
'10' == 10 // true
'10' === 10 // false
[] == 0 // true
[] === 0 // false
'' == false // true
'' === false // false
물론===을 사용 할 때 도 문제 가 생 길 수 있다.예 를 들 어:
NaN === NaN // false
ES6 에서 새로운 방법 을 제공 했다.Object.is()는===의 일부 특징 을 가지 고 더욱 좋 고 정확 하 며 일부 특수 한 장면 에서 더욱 잘 표현 된다.
Object.is(0 , ' '); //false
Object.is(null, undefined); //false
Object.is([1], true); //false
Object.is(NaN, NaN); //true
다음 그림 은=,===과 Object.is 의 대비 입 니 다.이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
기초 정리 - 1문자 (String) 숫자 (Number) 불린 (Boolean) null undefined 심볼 (Symbol) 큰정수 (BigInt) 따옴표로 묶어 있어야 함 Not-A-Number - 숫자 데이터 / 숫자로 표...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.