저는 Ruby의 ||=
메커니즘을 좋아 합니다. 변수가 존재하지 않거나 nil
인 경우 생성하고 다음과 동일하게 설정합니다.
amount # is nil
amount ||= 0 # is 0
amount ||= 5 # is 0
지금 JavaScript에서 비슷한 작업을해야합니다. 이를 수행하는 규칙이나 적절한 방법은 무엇입니까? ||=
유효한 구문이 아님을 알고 있습니다. 이를 처리하는 두 가지 명백한 방법은 다음과 같습니다.
window.myLib = window.myLib || {};
// or
if (!window.myLib)
window.myLib = {};
답변
둘 다 절대적으로 정확하지만 ||=
루비 처럼 작동하는 것을 찾고 있다면 . variable = variable || {}
당신이 찾고 있는 첫 번째 방법 🙂
답변
거짓 값인 ||
경우 오른쪽 피연산자를 평가 하는 논리 OR 연산자 를 사용할 수 있습니다 lVal
.
거짓 값에는 다음이 포함됩니다. null, false, 0, "", undefined, NaN
x = x || 1
답변
객체로 작업하는 경우 다음과 같이 구조화 (ES6 이후)를 사용할 수 있습니다.
({ myLib: window.myLib = {} } = window);
…하지만 혼동을 제외하고는 받아 들여진 대답에 대해 아무것도 얻지 못합니다.
답변
요청하신 연산자 는 JavaScript의 기능으로 제안되었습니다 . 현재 3 단계 에 있으므로 아직 공식 언어의 일부는 아니지만, 예상치 못한 중대한 문제를 발견하는 경우 기껏해야 사소한 변경으로 받아 들여질 것입니다.
이제 plugin-proposal-logical-assignment-operators Babel 플러그인을 사용하여 사용할 수 있습니다 . 나는 그 플러그인을 사용한 적이 없기 때문에 그것이 얼마나 잘 작동하는지 전혀 모른다.
답변
Ruby의 || = 연산자 단락 할당. 다음과 같이 생각할 수 있습니다.
return a || a = b
따라서 자바 스크립트에서 이것은 매우 유사하게 보입니다.
return a || (a = b);
그러나 아래 주석에서 지적한 것처럼이 문자 그대로의 루비 형식은 표준 자바 스크립트 관용구 a = a || 비.
참고 :
http://www.rubyinside.com/what-rubys-double-pipe-or-equals-really-does-5488.html
답변
정수 전용 자바 스크립트에서 | = 연산자를 사용하여 원하는 동작을 얻을 수 있습니다. 하지만 먼저 변수를 정의해야합니다.
let a = 0
a |= 100
console.log(a) // 100
개체
let o = {}
o.a |= 100
console.log(o) // {a: 100}
어레 이용
let arr = []
arr[0] |= 100
console.log(arr) // [100]
답변
