JavaScript 의 실 용적 인 팁 요약
이 글 은 평소에 자신 이 실천 한 블 로그 에서 배 운 것 과 일부 프로젝트 소스 에서 본 자바 script 기 교 를 기록 하고 있다.어떤 것들 은 기음 기교 라 고 할 수 있 고,어떤 것들 은 ES6+에서 비교적 실용성 을 가 진 새로운 문법 일 수도 있다.
&&와|||의 묘 용
때때로 우 리 는 어떤 함수 나 변수 가 true 일 때 다른 함 수 를 실행 해 야 한다.예 를 들 면:
const task1 = () => {
console.log(' task1');
return Math.random() >= 0.5;
}
const task2 = () => console.log('task1 task2');
if (task1()) task2();
위의 if 문 구 는&&직접 약자 로 사용 할 수 있 습 니 다.
task1() && task2();
task 1 이 실패(즉,task 1 이 false 로 돌아 가 는 것)한 후에 task 3 를 실행 하려 면 다음 을 사용 할 수 있 습 니 다.
const task3 = () => console.log('task1 task3');
task1() && task2() || task3();
본질 적 으로&&와||의 단락 특성 을 이용 했다.사실 여기 서 조건 연산 자 를 사용 하 는 것 도 가능 하 다.
task1() ? task2() : task3();
제 가 최근 에 react hooks 를 사용 하여 개발 한 프로젝트 의 코드 세 션 을 보 여 드 리 겠 습 니 다.
const ProfileItem = (props) => {
const { name, value, render } = props;
return (
<div className="profile-item">
<span className="item-name">{name}</span>
<form action="">
{/* render props */}
{render && render(props) || <SimpleProfileItemContent value={value}/>}
</form>
</div>
)
}
함수 기본 값ES5 버 전
단락 이나 조작 자 를 사용 하여 함수 의 기본 값 을 설정 하 는 방식 은 흔 하 다.그러나 일부 구덩이 가 있 습 니 다.아래 에 보 여 준 코드 에서 기본 값 매개 변수 가 하나의 숫자 일 때 전 삼 이 0 인지 기본 값 을 사용 하 는 지 Y 가 0 일 때 단독으로 판단 해 야 합 니 다.
const pow = (x, y) => {
y = y || 2;
let result = 1;
for (let i = 0, max = y; i < max; i++) {
result *= x;
}
return result;
}
console.log(pow(2)); // => 4
console.log(pow(2, 3)); // => 8
// y 0 , y 2
console.log(pow(2, 0)); // => 4
ES6 버 전ES6 문법 차원 에서 제공 하 는 기본 값 문법 은 훨씬 믿 을 만하 다.
const pow = (x, y=2) => {
let result = 1;
for (let i = 0, max = y; i < max; i++) {
result *= x;
}
return result;
}
console.log(pow(2)); // => 4
console.log(pow(2, 3)) // => 8
console.log(pow(2, 0)); // => 1
클래스 배열클래스 배열 은 arguments,jquery 대상 처럼 아래 표 시 를 사용 하여 length 속성 과 배열 이 비슷 하지만 배열 의 대상 은 아 닙 니 다.
클래스 배열 에 slice,map 등 집합 함수 가 없 는 것 도 우리 가 가끔 클래스 배열 을 배열 로 바 꿔 야 하 는 이유 입 니 다.
function func() {
for (let i = 0, max = arguments.length; i < max; i++) {
console.log(arguments[i]);
}
console.log(Array.isArray(arguments)); // => false
// slice, forEach, map
console.log(arguments.slice === undefined); // => true
}
func('Google', 'facebook', 'Microsoft');
// =>
// Google
// facebook
// Microsoft
ES5 에서 의 전환 방법Array 프로 토 타 입 의 slice 방법 을 arguments 대상 에 연결 하여 호출 하고 매개 변 수 를 전달 하지 않 는 목적 은 모든 요 소 를 되 돌려 주기 위해 서 입 니 다.
function func() {
const array = Array.prototype.slice.call(arguments);
console.log(array.slice(0, 1));
}
func('Google', 'facebook', 'Microsoft'); // => [ 'Google' ]
ES6 에서 의 전환 방법ES6 는 클래스 배열 을 배열 로 바 꾸 는 방법 이 많다.
확장 연산 자 사용
function func() {
console.log([...arguments])
}
func('Google', 'facebook', 'Microsoft'); // [ 'Google', 'facebook', 'Microsoft' ]
Array.from 사용 하기
function func() {
console.log(Array.from(arguments))
}
func('Google', 'facebook', 'Microsoft'); // [ 'Google', 'facebook', 'Microsoft' ]
연속 정수 의 배열 을 구성 하 다.여기 서 바로 제 가 생각 하 는 가장 좋 은 방법 을 알려 드릴 게 요.
// 2 8
const array = Array.from({ length: 8}).map((ele, index) => index + 2);
console.log(array); // => [ 2, 3, 4, 5, 6, 7, 8, 9 ]
// , Array.from
const array = Array.from({ length: 8}, (ele, index) => index + 2);
console.log(array); // => [ 2, 3, 4, 5, 6, 7, 8, 9 ]
함수 매개 변 수 는 재 구성 할당 을 사용 합 니 다.함수 매개 변수 가 비교적 많 을 때 우 리 는 매개 변 수 를 설정 대상 을 직접 받 아들 이게 합 니 다.그러나 대상 파 라 메 터 를 사용 하면 기본 값 을 설정 할 수 없습니다.함수 체 에서 대상 파 라 메 터 를 사용 할 때 대상 파 라 메 터 를 통 해 방문 해 야 합 니 다.방문 횟수 가 많 거나 끼 워 넣 으 면 불편 합 니 다.함수 매개 변수 에서 재 구성 할당 을 사용 하면 위의 문 제 를 해결 할 수 있 습 니 다.
// ,
const getUsers = ({
offset=0,
limit=1,
orderBy="salary"
}={}) => {
//
console.log({ offset, limit, orderBy });
}
getUsers({ offset: 10, limit: 20,orderBy: 'age' }); // => { offset: 10, limit: 20, orderBy: 'age' }
getUsers();// => { offset: 0, limit: 1, orderBy: 'salary' }
사용!!다른 형식 을 bool 형 으로 변환 합 니 다.
console.log(!!{}); // true
console.log(!!0); // false
console.log(!![]); // true
console.log(!!undefined); // false
const httpGet = (url, retry) => {
if (!!retry) {
//
}
}
JSON.stringify딥 클론
선 직렬 화 를 사용 하고 반 직렬 화 를 하 는 방식 으로 대상 을 깊이 있 게 복제 하 는 것 은 일반적인 상황 에서 매우 편리 하 며,단점 은 함수 와 계승 할 수 없 는 속성 이다.
함수 속성 을 복제 하려 면 lodash 의 cloneDeep 을 추천 합 니 다.
const me = {
name: 'lyreal666',
age: 23,
speak() {
console.log(`Hello, I'm ly!`);
}
}
const clonedMe = JSON.parse(JSON.stringify(me));
console.log(clonedMe); // => { name: 'lyreal666', age: 23 }
console.log(clonedMe.speak === undefined); // => true
두 번 째 와 세 번 째 매개 변 수 를 사용 합 니 다.JSON.stringify 의 두 번 째 매개 변 수 는 속성 값 을 처리 하 는 데 사 용 됩 니 다.세 번 째 매개 변 수 는 출력 된 json 문자열 의 들 여 쓰기 길 이 를 지정 하고 숫자 를 전달 할 수도 있 고 문자열 을 전달 할 수도 있 습 니 다.
const me = {
name: 'lyreal666',
age: 23,
speak() {
console.log(`Hello, I'm ly!`);
}
}
const jsonStr = JSON.stringify(me, (key, value) => key === 'name' ? ' ' : value, 2);
console.log(jsonStr);
/* =>
{
"name": " ",
"age": 23
}
*/
우아 한 커 플해체 할당 과 Object.entries 를 사용 합 니 다.
const me = {
name: 'lyreal666',
age: 23,
speak() {
console.log(`Hello, I'm ly!`);
}
}
for (const [key, value] of Object.entries(me)) {
console.log(`${key}: ${value}`);
}
/* =>
name: lyreal666
age: 23
speak: speak() {
console.log(`Hello, I'm ly!`);
}
*/
배열 을 비 우 는 가장 빠 른 방법댓 글 에 서 는 length 를 직접 수정 하 는 방법 에 문제 가 있다 고 합 니 다.저도 예전 에 배열 을 비 우 는 방법 에 대한 토론 을 본 적 이 있 지만 일반적인 상황 에서 이렇게 사용 하 는 것 은 문제 가 없다 고 생각 합 니 다.간단 하면 서도 새 배열 에 메모 리 를 다시 할당 하지 않 아 도 된다 고 생각 합 니 다.
const array = [1, 2, 3, 4];
array.length = 0;
console.log(array); // => []
//
let array = [1, 2, 3, 4];
array = [];
하나의 정수 가-1 인지 아 닌 지 를 판단 하 다.
// ~
console.log(~1); // => -2
console.log(~0); // => -1
console.log(~(-3)); // => 2
console.log(~(-1)); // => 0
const number = -2;
// -1
if (!~number) {
// number -1 ...
}
즉시 실행 함수즉시 실행 함 수 는 우리 코드 의 변 수 를 외부 변 수 를 오염 시 키 지 않 게 할 수 있 습 니 다.흔히 볼 수 있 는 사용 방식 은 아래 와 같 습 니 다.
//
(function(window, $) {
//
}) (window, jQuery)
더 우아 한 방식 은 다음 과 같 습 니 다.사실은 많은 다른 산술 연산 자,예 를 들 어+,-,*,~등 도 가능 합 니 다.
! function(window, $) {
//
} (window, jQuery)
// +, -, *
+ function(window, $) {
//
} (window, jQuery)
// new, typeof
new function(window, $) {
//
} (window, jQuery);
set 를 사용 하여 배열 을 반복 합 니 다.
console.log([...new Set([1, 3, 1, 2, 2, 1])]); // => [ 1, 3, 2 ]
reduce 연승 또는 연 가 를 사용 합 니 다.
const array = [ 1, 2, 3, 4];
//
console.log(array.reduce((p, c) => p + c)); // => 10
//
console.log(array.reduce((p, c) => p * c)); // => 24
정돈 하 다Math 중의 한 무더기 의 추출 함 수 는 여기 서 말 하지 않 겠 습 니 다.주로 비교적 교묘 하 게 추출 하 는 방식 을 제시 합 니 다.
console.log(~~3.14); // => 3
console.log(~~(-2.5)); // => -2
console.log(6.18 | 0); // => 6
console.log(-3.6 | 0); // => -3
console.log(9.9 >> 0); // => 9
console.log(-2.1 >> 0); // => -2
// superagent http node , |
var type = status / 100 | 0;
// status / class
res.status = status;
res.statusType = type;
// basics
res.info = 1 == type;
res.ok = 2 == type;
res.clientError = 4 == type;
res.serverError = 5 == type;
res.error = 4 == type || 5 == type;
사용+다른 형식 을 number 형식 으로 변환
console.log(+'3.14'); // => 3.14
console.log(typeof +'3.14') // => number
const sleep = (milliseconds) => {
return new Promise((resolve, reject) => {
setTimeout(() => resolve(), milliseconds);
});
}
// console.time
! async function main() {
const start = +new Date();
await sleep(3000);
const end = +new Date();
console.log(` ${end - start}`); // 3002
}();
과학 계수 법 을 사용 하여 큰 숫자 를 표시 하 다.
const str1 = 'hello';
const str2 = ' world'
console.time(' + ');
for (let i = 0; i < 200000000; i++) {
const joinedStr = str1 + str2;
}
console.timeEnd(' + ');
console.time(' ');
// 8 0
for (let i = 0; i < 2E8; i++) {
const joinedStr =`${str1}${str2}`;
}
console.timeEnd(' ')
/* =>
+ : 3238.037ms
: 3680.225ms
*/
교환 변수 값직접 재 구성 할당
let a = 666;
let b = 999;
[a, b] = [b, a];
console.log({ a, b }); // => { a: 999, b: 666 }
무 작위 문자열 가 져 오기아래 표 시 된 2 가 시 작 된 문자열 을 캡 처 한 것 은 Math.random()이 되 돌아 오 는 소수 로 구 성 된 문자열 의 0 이 필요 하지 않 기 때 문 입 니 다.36 진법 을 사용 하면 문자 종류 가 더 많은 무 작위 문자열 을 만 들 수 있 습 니 다.
console.log(Math.random().toString(16).substring(2)); // 13 => 45d9d0bb10b31
console.log(Math.random().toString(36).substring(2)); // 11 => zwcx1yewjvj
평면 화 배열ES 2019 는 Array.prototype.flat 를 신 설 했 으 며,현재 chrome 최신 정식 판 73.0.3683.103 은 지원 되 고 있 으 며,node 최신 LTS 10.15.3 은 지원 되 지 않 으 며,node 최신 개발 판 11.13.0 은 지원 되 고 있다.여기에 금 을 파 는 한 형제의 면경 에서 보 이 는 비교적 hack 방법 을 붙 이 고 상황 에 따라 유형 전환 에 주의해 야 한다.
const array = [1, [2, [3, 4], 5], 6, 7];
console.log(array.toString().split(',').map(ele => Number.parseInt(ele))); // => [ 1, 2, 3, 4, 5, 6, 7 ]
최근 에 텐 센트 면접 을 봤 는데 아 리 전단 실습 실 은 정말 한 마디 로 말 하기 어 려 웠 습 니 다.그 다음 에 글 한 편 을 통 해 제 최근 의 면접 경험 에 대해 이야기 할 계획 입 니 다.총결산
이상 은 이 글 의 모든 내용 입 니 다.본 고의 내용 이 여러분 의 학습 이나 업무 에 어느 정도 참고 학습 가 치 를 가지 기 를 바 랍 니 다.여러분 의 저희 에 대한 지지 에 감 사 드 립 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.