[javascript] JavaScript 표현식에서 쉼표는 무엇을합니까?

내가 사용하는 경우 :

1.09 * 1; // returns "1.09"

하지만 내가 사용한다면 :

1,09 * 1; // returns "9"

1,09가 숫자가 아니라는 것을 알고 있습니다.

마지막 코드에서 쉼표는 무엇을합니까?

더 많은 예

if (0,9) alert("ok"); // alert
if (9,0) alert("ok"); // don't alert

alert(1); alert(2); alert(3); // 3 alerts
alert(1), alert(2), alert(3); // 3 alerts too

alert("2",
    foo = function (param) {
        alert(param)
    },
    foo('1')
)
foo('3'); // alerts 1, 2 and 3



답변

쉼표 연산자는 두 피연산자 (왼쪽에서 오른쪽으로)를 모두 평가하고 두 번째 피연산자의 값을 반환합니다.

출처 : https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special_Operators/Comma_Operator

예를 들어 표현식은로 1,2,3,4,5평가됩니다 5. 분명히 쉼표 연산자는 부작용이있는 작업에만 유용합니다.

console.log(1,2,3,4,5);
console.log((1,2,3,4,5));


답변

더 고려해야 할 사항 :

console.log((0, 9));
console.log((9, 0));
console.log(("foo", "bar"));


답변


쉼표 연산자는 두 피연산자 (왼쪽에서 오른쪽으로)를 모두 평가하고 피연산자의 값을 반환합니다 second
.

https://stackoverflow.com/a/3561056/5934465

이럴거야!

쉼표 연산자는 각 피연산자를 평가하고 (왼쪽에서 오른쪽으로) last피연산자 의 값을 반환합니다 .

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comma_Operator


답변

보라 여기 – 쉼표는 여러 표현 / 문을 의미합니다. 예를 들어 코드에서 다음과 같은 줄을 사용할 수 있습니다.

var a=0, b=0, c=0;

이것은 작성하지 않고 세 변수를 모두 선언합니다.

var a=0;
var b=0;
var c=0;

도움이되기를 바랍니다.


답변

객체에 속성을 추가 / 수정 하고 동일한 줄에 반환하는 것은 가능한 사용 사례입니다.

console.log(
  ((x) => (o = {biggerCond: r => r >= x},
           o.r5 = Array.from(window.crypto.getRandomValues(new Uint16Array(5))),
           o.isAnyBigger = o.r5.some(o.biggerCond),
           o.bigger = o.isAnyBigger ? o.r5.filter(o.biggerCond) : [x], o )
  )(5e4)
);
// Example
// {
//   bigger: [58414, 56500, 63397],
//   isAnyBigger: true,
//   isBiggerCond: r => r >= x,
//   r5: [58414, 12015, 56500, 63397, 43861]
// }

위의 익명 함수는 입력 값보다 큰 임의 값을 가진 객체를 반환하거나,없는 경우 bigger속성 에 포함 된 배열에 입력 값 자체를 포함 합니다.

그것은 여전히 ​​( 화살표 함수 와 같은) 구문상의 설탕 이지만 줄 수를 줄입니다 … 일부 JS minifier가 유사한 방식으로 코드를 자동으로 감지하고 조정하는지 궁금합니다. 콘솔에서 실행하십시오.

((x)=>(o={biggerCond:r=>r>=x},o.r5=Array.from(window.crypto.getRandomValues(new Uint16Array(5))),o.isAnyBigger=o.r5.some(o.biggerCond),o.bigger=o.isAnyBigger?o.r5.filter(o.biggerCond):[x],o))(5e4)


답변