目次
チャレンジ
2 つのブール値の間で加算演算子 ( ) を使用しようとすると、数値に変換されます。
总结
ホームページ ウェブフロントエンド jsチュートリアル 20 個の奇妙な JS 式、出力結果を推測してください!

20 個の奇妙な JS 式、出力結果を推測してください!

Jun 27, 2022 pm 01:41 PM
javascript

この記事では、20 個の奇妙な JavaScript 式を紹介します。その出力結果に答えられますか?さあ、チャレンジに答えてみませんか!

20 個の奇妙な JS 式、出力結果を推測してください!

#JavaScript は非常にフォールトトレラントなプログラミング言語であり、他のプログラミング言語では不正な多くの式が JavaScript では正常に動作します。

これにより、多くの奇妙なコードが生成されます。挑戦してみませんか?

チャレンジ

このチャレンジでは、20 個の奇妙な表現が表示され、その出力を推測する必要があります。

#1.

true + false
ログイン後にコピー

2.

**1.**
ログイン後にコピー

3.

[1, 2, 3] + [4, 5, 6]
ログイン後にコピー

4.

0.2 + 0.1 === 0.3
ログイン後にコピー

5.

10,2
ログイン後にコピー

6.

!!""
ログイン後にコピー

7 .

+!![]
ログイン後にコピー
#8.

true == "true"
ログイン後にコピー
#9.

010 - 03
ログイン後にコピー
#10.
"" - - ""
ログイン後にコピー

11.

null + 0
ログイン後にコピー

12.

0/0
ログイン後にコピー

13.

1/0 === 10 ** 1000
ログイン後にコピー

14.

true++
ログイン後にコピー

15.

"" - 1
ログイン後にコピー

16.

(null - 1) - "1"
ログイン後にコピー

17 .

38 * 4343 * 2342+ (“true” — 0)
ログイン後にコピー

#18.

5 + !5 + !!5
ログイン後にコピー
#19.

[] + [1] + 2
ログイン後にコピー
#20.

1 + 2 + "3"
ログイン後にコピー
結果と分析

true false

2 つのブール値の間で加算演算子 ( ) を使用しようとすると、数値に変換されます。

そして、

true1

に変換され、

false

0 に変換される必要があることは誰もが知っています。したがって、true false1 を返します。 [,,,].length[,,,]

3 つの空のスロットを持つ配列を出力します。最後のコンマは末尾のコンマです。

このように考えることができます。

[,]     ==> [empty,]
[,,]    ==> [empty, empty,]
[,,,]   ==> [empty, empty, empty,]
ログイン後にコピー
したがって、

[,,,].length は 3 を返します。

[1, 2, 3] [4, 5, 6]

配列間で加算演算子 ( ) を使用しようとすると、文字列に変換されます。 。

配列を文字列に変換する場合、配列の

toString() メソッドが呼び出されます。 toString()

このメソッドは JavaScript によって内部的に使用され、配列をテキストとして表示する必要がある場合、その要素をカンマで接続します。

[1, 2, 3].toString() ==> '1, 2, 3'
[4, 5, 6].toString() ==> '4, 5, 6'
ログイン後にコピー
So

[1, 2, 3] + [4, 5, 6] ==> '1, 2, 3' + '4, 5, 6' ==> "1,2,34,5,6"
ログイン後にコピー
0.2 0.1 === 0.3浮動小数点数はコンピュータで正確に表現することが難しいため、数学的には

0.1

0.2 は、コンピューターでは近似的な数値でしか表現できません。

0.1 0.2 の結果は、正確には 0.3 ではありません。 JavaScriptに限らず、他のプログラミング言語でも同様の問題があります。

10, 2コンマ (,

) も JavaScript では有効な演算子であり、各オペランドを (左から右、そして右)、最後のオペランドの値を返します。

したがって、10,2 は 2

!!""

""

は空の文字列です。偽の値。

注: 0、空の文字列 ""、null および unknown はすべて仮想値です。

#!

は論理「not」演算子で、true を false に、またはその逆に変換します。

# を 2 回使用すると (

#)、通常の値がブール値に変換されます。したがって、!""

false

を返します。 !![]配列は空の配列も含めてすべて true 値です。したがって、!![]

true

を返します。

!![]; // -> true
ログイン後にコピー

は、真の値を数値表現 1 に変換します。そのため、 !![]

1# # を返します。 #。

true == "true"二重等価演算子 (==) は、2 つのオペランドが等しいかどうかをチェックし、ブール値の結果を返します。 抽象的な等価比較ルールに従って、比較すると両方の値が数値に変換されます。

true == "true" ==> Number(true) == Number("true") ==> 1 == NaN
ログイン後にコピー
したがって、

ture == "true" false を返します。

010 - 03

ちょっとしたトリックがあります。数値が

0 で始まる場合、それは 8 進数として扱われます。つまり:

010 - 03 ==> 8 - 3 ==> 5
ログイン後にコピー
また:

数値が 0b で始まる場合、JavaScript では 2 進数として扱われます。

数値が 0x で始まる場合、JavaScript では 16 進数として扱われます。

  • ""--""

これは構文が悪いように見えますが、それはうまくいきます。 20 個の奇妙な JS 式、出力結果を推測してください!空の文字列は、ブール値 false または数値 0 に変換できます。したがって、-""

0

##null 0 です。<p>正如我们之前所说,<code>null是一个虚值。它将被转换为布尔值false或数字值0。所以结果返回 0

0/0

这是一个非法的数学表达式。方程0/0没有任何有意义的数字答案,输出的结果只是NaN

1/0 === 10 1000**

虽然1/0和之前一样也是一个非法的数学表达式。但是当除数不是0时,JavaScript认为这个表达式的结果是Infinity

20 個の奇妙な JS 式、出力結果を推測してください!

10**1000是一个很大数字,JS 无法正确表示这个数字。(JavaScript中最高的整数值是2^53-1)。所以10 * 1000也被当作无限大(Infinity)。

无穷大总是等于另一个无穷大,所以1/0 === 10 ** 1000返回 true。

true++

这没有什么特别的,这只是一个语法错误。

20 個の奇妙な JS 式、出力結果を推測してください!

""- 1

虽然加法运算符(+)同时用于数字和字符串,但减法运算符(-)对字符串没有用处,所以JavaScript将其解释为数字之间的操作。一个空的字符串会被类型强制为0。

"" - 1 ==> Number("") - 1 ==> 0 - 1 ==> -1
ログイン後にコピー

所以 "" — 1 返回 -1

(null - 1) - "1"

正如上面所说。

null ==>  0
(null - 1) ==> -1
"1" ==> 1
ログイン後にコピー

所以 (null — 1) — “1” 返回 -2

38 4343 2342+ ("true" - 0)

你可能会怀疑JS是如此疯狂,以至于它将字符串 "true" 转换为布尔值 true 的数字表示。然而,它并没有那么疯狂。实际发生的情况是,它试图将字符串转换为数字,但失败了。

Number("true"); // -> NaN
ログイン後にコピー

在JavaScript的数字运算中,只要有一个值是NaN,运算的最终结果就一定是NaN。38 * 4343 * 2342只是一个烟雾弹。

5 + !5 + !!5

正如上面所说。

  • 0、空字符串""、null和undefined都是虚值。
  • 非零的数字是真值。

所以:

!5 ==> 0
!!5 ==> 1
ログイン後にコピー

[] + [1] + 2

试图在数组之间使用加法运算符(+)时,它们会被转换为字符串。

[] ==> ''
[1] ==> '1'
[] + [1] ==> '1'
'1' + 2 ==> '12'
ログイン後にコピー

所以结果是'12'。

20 個の奇妙な JS 式、出力結果を推測してください!

1 + 2 + "3"

JavaScript 从左到右执行这些操作。当数字3与字符串3相加时,字符串连接将优先进行。

1 + 2; // -> 3
3 + "3"; // -> "33"
ログイン後にコピー

总结

坦率地说,这些挑战并没有为我胶们编码技能提供任何价值,所以不应该在实际项目中写这种代码

但是,把这些技巧作为朋友和同事之间的一些装13,不是一件非常有趣的事情吗?

作者:Marina Mosti

来源:medium

原文:https://medium.com/frontend-canteen/20-useless-but-funny-challange-for-javascript-develor-9eea39bb8efb

【相关视频教程推荐:web前端

以上が20 個の奇妙な JS 式、出力結果を推測してください!の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 Dec 17, 2023 pm 02:54 PM

WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法 はじめに: 技術の継続的な発展により、音声認識技術は人工知能の分野の重要な部分になりました。 WebSocket と JavaScript をベースとしたオンライン音声認識システムは、低遅延、リアルタイム、クロスプラットフォームという特徴があり、広く使用されるソリューションとなっています。この記事では、WebSocket と JavaScript を使用してオンライン音声認識システムを実装する方法を紹介します。

WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー WebSocket と JavaScript: リアルタイム監視システムを実装するための主要テクノロジー Dec 17, 2023 pm 05:30 PM

WebSocketとJavaScript:リアルタイム監視システムを実現するためのキーテクノロジー はじめに: インターネット技術の急速な発展に伴い、リアルタイム監視システムは様々な分野で広く利用されています。リアルタイム監視を実現するための重要なテクノロジーの 1 つは、WebSocket と JavaScript の組み合わせです。この記事では、リアルタイム監視システムにおける WebSocket と JavaScript のアプリケーションを紹介し、コード例を示し、その実装原理を詳しく説明します。 1.WebSocketテクノロジー

JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 JavaScript と WebSocket を使用してリアルタイムのオンライン注文システムを実装する方法 Dec 17, 2023 pm 12:09 PM

JavaScript と WebSocket を使用してリアルタイム オンライン注文システムを実装する方法の紹介: インターネットの普及とテクノロジーの進歩に伴い、ますます多くのレストランがオンライン注文サービスを提供し始めています。リアルタイムのオンライン注文システムを実装するには、JavaScript と WebSocket テクノロジを使用できます。 WebSocket は、TCP プロトコルをベースとした全二重通信プロトコルで、クライアントとサーバー間のリアルタイム双方向通信を実現します。リアルタイムオンラインオーダーシステムにおいて、ユーザーが料理を選択して注文するとき

WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 WebSocketとJavaScriptを使ったオンライン予約システムの実装方法 Dec 17, 2023 am 09:39 AM

WebSocket と JavaScript を使用してオンライン予約システムを実装する方法 今日のデジタル時代では、ますます多くの企業やサービスがオンライン予約機能を提供する必要があります。効率的かつリアルタイムのオンライン予約システムを実装することが重要です。この記事では、WebSocket と JavaScript を使用してオンライン予約システムを実装する方法と、具体的なコード例を紹介します。 1. WebSocket とは何ですか? WebSocket は、単一の TCP 接続における全二重方式です。

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 Dec 17, 2023 pm 05:13 PM

JavaScript と WebSocket: 効率的なリアルタイム天気予報システムの構築 はじめに: 今日、天気予報の精度は日常生活と意思決定にとって非常に重要です。テクノロジーの発展に伴い、リアルタイムで気象データを取得することで、より正確で信頼性の高い天気予報を提供できるようになりました。この記事では、JavaScript と WebSocket テクノロジを使用して効率的なリアルタイム天気予報システムを構築する方法を学びます。この記事では、具体的なコード例を通じて実装プロセスを説明します。私たちは

簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 簡単な JavaScript チュートリアル: HTTP ステータス コードを取得する方法 Jan 05, 2024 pm 06:08 PM

JavaScript チュートリアル: HTTP ステータス コードを取得する方法、特定のコード例が必要です 序文: Web 開発では、サーバーとのデータ対話が頻繁に発生します。サーバーと通信するとき、多くの場合、返された HTTP ステータス コードを取得して操作が成功したかどうかを判断し、さまざまなステータス コードに基づいて対応する処理を実行する必要があります。この記事では、JavaScript を使用して HTTP ステータス コードを取得する方法を説明し、いくつかの実用的なコード例を示します。 XMLHttpRequestの使用

JavaScriptでinsertBeforeを使用する方法 JavaScriptでinsertBeforeを使用する方法 Nov 24, 2023 am 11:56 AM

使用法: JavaScript では、insertBefore() メソッドを使用して、DOM ツリーに新しいノードを挿入します。このメソッドには、挿入される新しいノードと参照ノード (つまり、新しいノードが挿入されるノード) の 2 つのパラメータが必要です。

JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 JavaScript と WebSocket: 効率的なリアルタイム画像処理システムの構築 Dec 17, 2023 am 08:41 AM

JavaScript は Web 開発で広く使用されているプログラミング言語であり、WebSocket はリアルタイム通信に使用されるネットワーク プロトコルです。 2 つの強力な機能を組み合わせることで、効率的なリアルタイム画像処理システムを構築できます。この記事では、JavaScript と WebSocket を使用してこのシステムを実装する方法と、具体的なコード例を紹介します。まず、リアルタイム画像処理システムの要件と目標を明確にする必要があります。リアルタイムの画像データを収集できるカメラ デバイスがあるとします。

See all articles