자 바스 크 립 트 규범
원문:https://github.com/airbnb/javascript
주: 본인 은 자신의 개발 습관 에 따라 일부 규범 을 삭제 하고 수정 하 였 습 니 다.
자 바스 크 립 트 규범
내용 목록
유형 대상 배열 문자열 함수 속성 변수 조건 식 과 등호 조각 주석 공백 쉼표 분점 형식 변환 명명 약정 액세스 기 구조 기 이벤트 모듈 jQuery
ES5 호환성 성능 자원 어떤 사람 이 사용 하고 있 습 니까 번역 자 바스 크 립 트 스타일 가이드 공헌 자 허가 유형
원본 값: 전송 값 에 해당 합 니 다.
string
number
boolean
null
undefined
var foo = 1,
bar = foo;
bar = 9;
console.log(foo, bar); // => 1, 9
복잡 유형: 인용
object
array
function
var foo = [1, 2],
bar = foo;
bar[0] = 9;
console.log(foo[0], bar[0]); // => 9, 9
[⬆]
대상
글자 액면가 로 대상 만 들 기
// bad
var item = new Object();
// good
var item = {};
보존 자 를 사용 하지 마 세 요. reserved words 키 로 삼다
// bad
var superman = {
class: 'superhero',
default: { clark: 'kent' },
private: true
};
// good
var superman = {
klass: 'superhero',
defaults: { clark: 'kent' },
hidden: true
};
[⬆]
배열
글꼴 값 으로 배열 만 들 기
// bad
var items = new Array();
// good
var items = [];
배열 의 길 이 를 모 르 면 push 를 사용 하 십시오.
var someStack = [];
// bad
someStack[someStack.length] = 'abracadabra';
// good
someStack.push('abracadabra');
배열 을 복사 할 때 slice 를 사용 합 니 다. jsPerf
var len = items.length,
itemsCopy = [],
i;
// bad
for (i = 0; i < len; i++) {
itemsCopy[i] = items[i];
}
// good
itemsCopy = items.slice();
slice 를 사용 하여 클래스 배열 의 대상 을 배열 로 변환 합 니 다.
function trigger() {
var args = Array.prototype.slice.call(arguments);
...
}
[⬆]
문자열
문자열 에 작은 따옴표 사용 하기
''
// bad
var name = "Bob Parr";
// good
var name = 'Bob Parr';
// bad
var fullName = "Bob " + this.lastName;
// good
var fullName = 'Bob ' + this.lastName;
80 글자 가 넘 는 문자열 은 문자열 로 줄 을 바 꿔 야 합 니 다 주: 과도 하 게 사용 하면 긴 문자열 연결 이 성능 에 영향 을 줄 수 있 습 니 다. jsPerf & Discussion
// bad
var errorMessage = 'This is a super long error that was thrown because of Batman. When you stop to think about how Batman had anything to do with this, you would get nowhere fast.';
// bad
var errorMessage = 'This is a super long error that \
was thrown because of Batman. \
When you stop to think about \
how Batman had anything to do \
with this, you would get nowhere \
fast.';
// good
var errorMessage = 'This is a super long error that ' +
'was thrown because of Batman.' +
'When you stop to think about ' +
'how Batman had anything to do ' +
'with this, you would get nowhere ' +
'fast.';
프로 그래 밍 할 때 문자열 연결 대신 join 을 사용 하여 문자열 을 만 듭 니 다. 특히 IE: jsPerf.
var items,
messages,
length, i;
messages = [{
state: 'success',
message: 'This one worked.'
},{
state: 'success',
message: 'This one worked as well.'
},{
state: 'error',
message: 'This one did not work.'
}];
length = messages.length;
// bad
function inbox(messages) {
items = '<ul>';
for (i = 0; i < length; i++) {
items += '<li>' + messages[i].message + '</li>';
}
return items + '</ul>';
}
// good
function inbox(messages) {
items = [];
for (i = 0; i < length; i++) {
items[i] = messages[i].message;
}
return '<ul><li>' + items.join('</li><li>') + '</li></ul>';
}
[⬆]
함수.
함수 식:
//
var anonymous = function() {
return true;
};
//
var named = function named() {
return true;
};
//
(function() {
console.log('Welcome to the Internet. Please follow me.');
})();
절대 비 함수 블록 에 함 수 를 설명 하지 마 십시오. 그 함 수 를 변수 에 부여 합 니 다. 브 라 우 저 는 이렇게 할 수 있 지만 해석 이 다 릅 니 다. 주: ECMA - 262 정 의 는
을 하나의 문장 으로 정의 합 니 다. 함수 성명 은 하나의 문장 이 아 닙 니 다. ECMA - 262 가 이 문제 에 대한 설명 을 읽 습 니 다.// bad
if (currentUser) {
function test() {
console.log('Nope.');
}
}
// good
if (currentUser) {
var test = function test() {
console.log('Yup.');
};
}
절대 매개 변 수 를 이름 짓 지 마 세 요.
arguments
, 이것 은 함수 작용 영역 을 넘 어 전 달 될 것 이다. arguments
대상// bad
function nope(name, options, arguments) {
// ...stuff...
}
// good
function yup(name, options, args) {
// ...stuff...
}
[⬆]
속성
변 수 를 사용 하여 속성 에 접근 할 때 괄호 를 사용 합 니 다.
var luke = {
jedi: true,
age: 28
};
function getProp(prop) {
return luke[prop];
}
var isJedi = getProp('jedi');
[⬆]
변량
항상 사용
var
변 수 를 설명 합 니 다. 이렇게 하지 않 으 면 전체 변수 가 발생 할 수 있 으 므 로 전체 네 임 스페이스 를 오염 시 키 지 않도록 해 야 합 니 다.// bad
superPower = new SuperPower();
// good
var superPower = new SuperPower();
사용
var
그리고 새 줄 은 여러 변 수 를 설명 하고 네 개의 빈 칸 을 들 여 씁 니 다.// bad
var items = getItems();
var goSportsTeam = true;
var dragonball = 'z';
// good
var items = getItems(),
goSportsTeam = true,
dragonball = 'z';
마지막 으로 할당 되 지 않 은 변 수 를 설명 합 니 다. 이전 할당 변 수 를 참조 하려 면 유용 합 니 다.
// bad
var i, len, dragonball,
items = getItems(),
goSportsTeam = true;
// bad
var i, items = getItems(),
dragonball,
goSportsTeam = true,
len;
// good
var items = getItems(),
goSportsTeam = true,
dragonball,
length,
i;
역할 영역 상단 에 변 수 를 설명 하고 변수 성명 과 할당 으로 인 한 문 제 를 피 합 니 다.
// bad
function() {
test();
console.log('doing stuff..');
//..other stuff..
var name = getName();
if (name === 'test') {
return false;
}
return name;
}
// good
function() {
var name = getName();
test();
console.log('doing stuff..');
//..other stuff..
if (name === 'test') {
return false;
}
return name;
}
// bad
function() {
var name = getName();
if (!arguments.length) {
return false;
}
return true;
}
// good
function() {
if (!arguments.length) {
return false;
}
var name = getName();
return true;
}
[⬆]
조건 식 과 등호
적 절 히 사용 하 다
===
화해시키다 !==
그리고 ==
화해시키다 !=
. 조건 식 의 강제 형식 변환 은 다음 과 같은 규칙 을 따른다.
대상 으로 계산 되다 true
Undefined 으로 계산 되다 false
Null 으로 계산 되다 false
불 값 으로 계산 되다 불 의 값 숫자. 하면, 만약, 만약... +0, -0, or NaN 으로 계산 되다 false , 그렇지 않 으 면 true
문자열 하면, 만약, 만약...
''
으로 계산 되다 false true if ([0]) {
// true
// An array is an object, objects evaluate to true
}
단축 키 를 사용 합 니 다.
// bad
if (name !== '') {
// ...stuff...
}
// good
if (name) {
// ...stuff...
}
// bad
if (collection.length > 0) {
// ...stuff...
}
// good
if (collection.length) {
// ...stuff...
}
읽 기 Truth Equality and JavaScript 더 알 아 보기 [⬆]
덩어리.
모든 줄 의 블록 에 큰 괄호 를 사용 합 니 다.
// bad
if (test)
return false;
// good
if (test) return false;
// good
if (test) {
return false;
}
// bad
function() { return false; }
// good
function() {
return false;
}
[⬆]
주석
쓰다
/** ... */
설명, 지정 유형 및 매개 변수 값 과 반환 값 을 포함 하여 여러 줄 의 설명 을 진행 합 니 다.// bad
// make() returns a new element
// based on the passed in tag name
//
// @param <String> tag
// @return <Element> element
function make(tag) {
// ...stuff...
return element;
}
// good
/**
* make() returns a new element
* based on the passed in tag name
*
* @param <String> tag
* @return <Element> element
*/
function make(tag) {
// ...stuff...
return element;
}
쓰다
//
한 줄 주석 을 달 고 댓 글 대상 위 에 한 줄 주석 을 달 고 주석 앞 에 빈 줄 을 놓 습 니 다.// bad
var active = true; // is current tab
// good
// is current tab
var active = true;
// bad
function getType() {
console.log('fetching type...');
// set the default type to 'no type'
var type = this._type || 'no type';
return type;
}
// good
function getType() {
console.log('fetching type...');
// set the default type to 'no type'
var type = this._type || 'no type';
return type;
}
만약 당신 에 게 문제 가 있다 면 다시 한 번 보 거나 실현 되 어야 할 해결 방법 을 건의 한다 면 당신 의 주석 앞 에 덧 붙 여야 합 니 다.
FIXME
혹시 TODO
다른 사람 이 신속하게 이해 하도록 돕다function Calculator() {
// FIXME: shouldn't use a global here
total = 0;
return this;
}
function Calculator() {
// TODO: total should be configurable by an options param
this.total = 0;
return this;
}
[⬆]
공백
tab 를 4 개의 빈 칸 으로 설정 합 니 다.
// bad
function() {
∙∙var name;
}
// bad
function() {
∙var name;
}
// good
function() {
∙∙∙∙var name;
}
대괄호 앞 에 빈 칸 을 놓다
// bad
function test(){
console.log('test');
}
// good
function test() {
console.log('test');
}
// bad
dog.set('attr',{
age: '1 year',
breed: 'Bernese Mountain Dog'
});
// good
dog.set('attr', {
age: '1 year',
breed: 'Bernese Mountain Dog'
});
직사각형 체인 을 만 들 때 들 여 쓰기 를 사용 합 니 다.
// bad
$('#items').find('.selected').highlight().end().find('.open').updateCount();
// good
$('#items')
.find('.selected')
.highlight()
.end()
.find('.open')
.updateCount();
// bad
var leds = stage.selectAll('.led').data(data).enter().append('svg:svg').class('led', true)
.attr('width', (radius + margin) * 2).append('svg:g')
.attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
.call(tron.led);
// good
var leds = stage.selectAll('.led')
.data(data)
.enter().append('svg:svg')
.class('led', true)
.attr('width', (radius + margin) * 2)
.append('svg:g')
.attr('transform', 'translate(' + (radius + margin) + ',' + (radius + margin) + ')')
.call(tron.led);
[⬆]
쉼표
쉼표 를 앞 에 두 지 마 세 요.
// bad
var once
, upon
, aTime;
// good
var once,
upon,
aTime;
// bad
var hero = {
firstName: 'Bob'
, lastName: 'Parr'
, heroName: 'Mr. Incredible'
, superPower: 'strength'
};
// good
var hero = {
firstName: 'Bob',
lastName: 'Parr',
heroName: 'Mr. Incredible',
superPower: 'strength'
};
여분의 쉼표 를 넣 지 마 세 요. 이것 은 IE 에서 오 류 를 일 으 킬 수 있 습 니 다. 또한 하나의 쉼표 가 더 있 으 면 일부 ES3 의 실현 은 다수의 그룹의 길 이 를 계산 할 수 있 습 니 다.
// bad
var hero = {
firstName: 'Kevin',
lastName: 'Flynn',
};
var heroes = [
'Batman',
'Superman',
];
// good
var hero = {
firstName: 'Kevin',
lastName: 'Flynn'
};
var heroes = [
'Batman',
'Superman'
];
[⬆]
분점
문장 이 끝나 면 반드시 점 수 를 더 해 야 한다.
// bad
(function() {
var name = 'Skywalker'
return name
})()
// good
(function() {
var name = 'Skywalker';
return name;
})();
// good
;(function() {
var name = 'Skywalker';
return name;
})();
[⬆]
형식 변환
문장의 시작 형식 변환. 문자열:
// => this.reviewScore = 9;
// bad
var totalScore = this.reviewScore + '';
// good
var totalScore = '' + this.reviewScore;
// bad
var totalScore = '' + this.reviewScore + ' total score';
// good
var totalScore = this.reviewScore + ' total score';
숫자 사용
parseInt
그리고 항상 유형 변환 의 기 수 를 가지 고 있 습 니 다.var inputValue = '4';
// bad
var val = new Number(inputValue);
// bad
var val = +inputValue;
// bad
var val = inputValue >> 0;
// bad
var val = parseInt(inputValue);
// good
var val = Number(inputValue);
// good
var val = parseInt(inputValue, 10);
// good
/**
* parseInt was the reason my code was slow.
* Bitshifting the String to coerce it to a
* Number made it a lot faster.
*/
var val = inputValue >> 0;
불 값:
var age = 0;
// bad
var hasAge = new Boolean(age);
// good
var hasAge = Boolean(age);
// good
var hasAge = !!age;
[⬆]
명명 규칙
단일 문자 이름 을 피하 고 변수 이름 에 설명 의 미 를 부여 합 니 다.
// bad
function q() {
// ...stuff...
}
// good
function query() {
// ..stuff..
}
이름 대상, 함수, 인 스 턴 스 를 사용 할 때 낙타 봉 이름 규칙 을 사용 합 니 다.
// bad
var OBJEcttsssss = {};
var this_is_my_object = {};
var this-is-my-object = {};
function c() {};
var u = new user({
name: 'Bob Parr'
});
// good
var thisIsMyObject = {};
function thisIsMyFunction() {};
var user = new User({
name: 'Bob Parr'
});
구조 함수 나 클래스 를 명명 할 때 낙타 봉 식 대문자 사용 하기
// bad
function user(options) {
this.name = options.name;
}
var bad = new user({
name: 'nope'
});
// good
function User(options) {
this.name = options.name;
}
var good = new User({
name: 'yup'
});
개인 속성 을 명명 할 때 앞 에 밑줄 을 추가 합 니 다.
_
// bad
this.__firstName__ = 'Panda';
this.firstName_ = 'Panda';
// good
this._firstName = 'Panda';
저장
this
인용 _this
. // bad
function() {
var self = this;
return function() {
console.log(self);
};
}
// bad
function() {
var that = this;
return function() {
console.log(that);
};
}
// good
function() {
var _this = this;
return function() {
console.log(_this);
};
}
[⬆]
액세스 기
속성의 액세스 기 함수 가 필요 하지 않 습 니 다 액세스 기 함수 가 있다 면 getVal () 과 setVal (hello) 을 사용 하 십시오.
// bad
dragon.age();
// good
dragon.getAge();
// bad
dragon.age(25);
// good
dragon.setAge(25);
속성 이 불 값 이면 isVal () 또는 hasVal () 을 사용 합 니 다.
// bad
if (!dragon.age()) {
return false;
}
// good
if (!dragon.hasAge()) {
return false;
}
get () 과 set () 함 수 를 만 들 수 있 지만 일치 해 야 합 니 다.
function Jedi(options) {
options || (options = {});
var lightsaber = options.lightsaber || 'blue';
this.set('lightsaber', lightsaber);
}
Jedi.prototype.set = function(key, val) {
this[key] = val;
};
Jedi.prototype.get = function(key) {
return this[key];
};
[⬆]
구조 기
대상 에 게 원형 을 분배 하 는 방법 은 새로운 대상 으로 원형 을 덮어 쓰 는 것 이 아니 라 원형 을 덮어 쓰 면 계승 에 문제 가 생 길 수 있다.
function Jedi() {
console.log('new jedi');
}
// bad
Jedi.prototype = {
fight: function fight() {
console.log('fighting');
},
block: function block() {
console.log('blocking');
}
};
// good
Jedi.prototype.fight = function fight() {
console.log('fighting');
};
Jedi.prototype.block = function block() {
console.log('blocking');
};
방법 은 되 돌 릴 수 있다.
this
도움말 방법 체인 가능.// bad
Jedi.prototype.jump = function() {
this.jumping = true;
return true;
};
Jedi.prototype.setHeight = function(height) {
this.height = height;
};
var luke = new Jedi();
luke.jump(); // => true
luke.setHeight(20) // => undefined
// good
Jedi.prototype.jump = function() {
this.jumping = true;
return this;
};
Jedi.prototype.setHeight = function(height) {
this.height = height;
return this;
};
var luke = new Jedi();
luke.jump()
.setHeight(20);
사용자 정의 toString () 방법 을 쓸 수 있 지만 정상적으로 작 동 하고 부작용 이 없 도록 합 니 다.
function Jedi(options) {
options || (options = {});
this.name = options.name || 'no name';
}
Jedi.prototype.getName = function getName() {
return this.name;
};
Jedi.prototype.toString = function toString() {
return 'Jedi - ' + this.getName();
};
[⬆]
이벤트
이벤트 에 데 이 터 를 추가 할 때 원본 값 이 아 닌 해시 가 들 어 옵 니 다. 이 는 다음 기여 자 들 이 이벤트 데이터 에 더 많은 데 이 터 를 추가 할 수 있 습 니 다.
// bad
$(this).trigger('listingUpdated', listing.id);
...
$(this).on('listingUpdated', function(e, listingId) {
// do something with listingId
});
더 좋다:
// good
$(this).trigger('listingUpdated', { listingId : listing.id });
...
$(this).on('listingUpdated', function(e, data) {
// do something with data.listingId
});
[⬆]
모듈
모듈
!
시작, 이 는 문제 가 있 는 모듈 이 마지막 점 수 를 포함 하 는 것 을 잊 어 버 리 면 합병 후 오류 가 발생 하지 않 음 을 보증 합 니 다 이 파일 은 낙타 봉 으로 이름 을 짓 고 같은 이름 의 폴 더 에서 내 보 낼 때 이름 이 일치 해 야 합 니 다 내 보 낸 모듈 을 이전 버 전 으로 설정 하고 되 돌려 주 는 noConflict () 방법 을 추가 합 니 다 항상 모듈 맨 위 에 설명 'use strict';
// fancyInput/fancyInput.js
!function(global) {
'use strict';
var previousFancyInput = global.FancyInput;
function FancyInput(options) {
this.options = options || {};
}
FancyInput.noConflict = function noConflict() {
global.FancyInput = previousFancyInput;
return FancyInput;
};
global.FancyInput = FancyInput;
}(this);
[⬆]
jQuery
캐 시 jQuery 조회
// bad
function setSidebar() {
$('.sidebar').hide();
// ...stuff...
$('.sidebar').css({
'background-color': 'pink'
});
}
// good
function setSidebar() {
var $sidebar = $('.sidebar');
$sidebar.hide();
// ...stuff...
$sidebar.css({
'background-color': 'pink'
});
}
DOM 조회 에 직렬 연결 을 사용 합 니 다.
$('.sidebar ul')
혹시 $('.sidebar ul')
,jsPerf 역할 영역 이 있 는 jQuery 대상 조회 사용
find
// bad
$('.sidebar', 'ul').hide();
// bad
$('.sidebar').find('ul').hide();
// good
$('.sidebar ul').hide();
// good
$('.sidebar > ul').hide();
// good (slower)
$sidebar.find('ul');
// good (faster)
$($sidebar[0]).find('ul');
[⬆]
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.