簡體   English   中英

是什么

[英]What is the <!--​ operator in Node.js?

我在代碼高爾夫IRC會議室中遇到了以下Node.js片段,這令我感到困惑。

for (let x = 100; 1^ <!-- x; x++)
    console.log(`${x} bottles of beer on the wall.`);
    console.log("The beer goes", x - <!-- (3, 5) % (
        - "outputs"
        * "fizz"
        * "buzz"
        * "fizzbuzz"
    ));

代碼似乎不正確 - 當我嘗試在Node中運行它時,我得到一個無限循環。 但令我驚訝的是,它確實編譯並運行!

它似乎使用了我以前從未見過的幾個功能。 ^1的使用讓我想起即將推出的C#范圍索引語法 ,這個列表幾乎看起來像Markdown ,似乎模數運算符的某種奇怪的currying正在進行中。

但是,我特別想了解<!--運算符發生了什么。 第一個實例正在循環中使用,帶有潛在的索引運算符,這似乎是某種范圍迭代語法或其他東西。 但我甚至猜不出第二次發生了什么。

Node.js中的<!--運算符是什么以及它應該如何使用?

這就是......你可能不認為它是HTML,但這就是語法的來源。

我將該代碼完全放入名為test.js的文件中,然后是node test.js

100 bottles of beer on the wall.
The beer goes NaN
100 bottles of beer on the wall.
The beer goes NaN
100 bottles of beer on the wall.
The beer goes NaN
--- ad infinitum

那么這里發生了什么? 什么是語法? 看起來最后有一個額外的括號! 此外,沒有{ } ,因此每次迭代都不應調用第二行! 對? 錯了

以下是源代碼:

for (let x = 100; 1^ <!-- x; x++)
    console.log(`${x} bottles of beer on the wall.`);
    console.log("The beer goes", x - <!-- (3, 5) % (
        - "outputs"
        * "fizz"
        * "buzz"
        * "fizzbuzz"
    ));

現在,這不是HTML中的<!-- comment opener,需要關閉--> 相反,將它視為/* ,JavaScript使用這些// :它們注釋該的其余部分。

for (let x = 100; 1^ // x; x++)
    console.log(`${x} bottles of beer on the wall.`);
    console.log("The beer goes", x - // (3, 5) % (
        - "outputs"
        * "fizz"
        * "buzz"
        * "fizzbuzz"
    ));

嗯..這開始變得更有意義了。 讓我們刪除評論並調整換行符:

for (let x = 100;
     1^ console.log(`${x} bottles of beer on the wall.`);
     console.log("The beer goes", x - - "outputs" * "fizz" * "buzz" * "fizzbuzz")
    );

AHA! 現在我們的無限循環開始變得有意義了。 循環的終止條件總是評估真實性:

1^ console.log(`${x} bottles of beer on the wall.`);

我們遞增的“運算符”是一個帶有廢話而不是數字的日志消息(即它打印NaN的原因):

console.log("The beer goes", x - - "outputs" * "fizz" * "buzz" * "fizzbuzz")

循環體是空的:

for ( ...
    );

我不確定這段代碼的目的是什么,但至少你知道為什么它正在完成你所觀察到的以及為什么它“工作”。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM