ホームページ  >  記事  >  ウェブフロントエンド  >  Javascript_javascript のヒントで注意する必要がある 3 つの演算子

Javascript_javascript のヒントで注意する必要がある 3 つの演算子

WBOY
WBOYオリジナル
2016-05-16 16:06:121011ブラウズ

C#で書くことに慣れているので、どんな演算子でどんな操作をすればいいのか考えてしまいますが、ある日その習慣が他の言語に覆される、好奇心が強いのかな

Xin、js だけで私のこの習慣が覆されました。どの演算子が私の 3 つの見解を覆したのかを見てみましょう。

1 つ: == 演算子

== 演算子が覆される理由は、次の例からわかります。

<1> "10"==10 ?

これを C# に置くと、コンパイラは「この野郎、型が違う、ただの馬鹿だ」と無礼に言うでしょう。 。 。しかし、JS では何が起こるでしょうか?

上の図から、興味があるかどうかに関係なく、10 が「10」に変換されるのか、「10」が 10 に変換されるのかを尋ねる人がいるかもしれません。つまり、これも

これは私がいつも不満に思っていることですが、C#ならILでどう扱われているかもわかりますが、JSでは何も見えず、教科書の一方的な言葉を聞くことしかできません。そして、見えているものは見えません。

つまり、覚えているだけでなく、文字列「10」を 10 に変換して整数と比較したとしか言えません。

true==1 ?

この質問は少し考えれば理解できますが、実際、C# の IL では true と false がそれに応じて 1 と 0 に変換されるため、js は判定時に true を 1 に変換してから、この

この現象はそれほど奇妙なことではないと思いますが、覚えておいてください。

<3> {valueOf:function(){return "10"}}==10?

この質問もかなり奇妙です。オブジェクトは int 型と比較できますか?しかし、実際には JS で行うことができます。原理は、オブジェクトを int/string と比較する場合、

です。

JS は内部で最初に valueOf メソッドを呼び出します。これはオブジェクトをデジタル化するためです。実際、ここでの興味深い部分は、カスタムの valueOf が親クラスの valueOf メソッドをオーバーライドすることです。そのため、上記の

の例は、「10」 == 10? と判定する場合です。

ここでもう 1 つ注意してください。 valueOf メソッドがクラスに定義されていない場合、JS 内部エンジンは toString() メソッドを再度探し、存在する場合はそれを実行します。

これらの新しい用法に触れると、少し慌てたり混乱したりするのではないでしょうか?プログラムに潜在的なバグがあるのではないかと心配な場合は、念のため

を行ってください。

比較のために同じデータ型に変換します。もちろん、C# の論理演算子に最も近いと言える === 演算子も

「==」に基づいて、型が等しいかどうかを判断しますか?例:

2: && および || 演算子

これら 2 つの演算子も非常に奇妙です。私たちの思考習慣では、これら 2 つの演算子の両側は bool 型である必要がありますが、JS ではこれらの定義が完全に覆されるため、多くの新しいルールを完成させることができます。たとえば、jquery のソース コードには、この痕跡が随所に見つかります。

写真から、bup=b && b.parentNode という文が見えますが、この文の意味が理解できますか?実際には、まず b が存在するかどうかを判断することを意味します。 b が存在しない場合は、

します。

おそらく b は未定義、null、0、または NaN です。b が存在する場合、m.parentNode が返されます。C# を使用する場合は、いくつかの if 条件が必要になります。

コードを単純化してから、 || 演算を見てみましょう。これはソース コードではオーバーフローしていると言えますが、一見すると C# の null 許容演算子に似ているので、より親しみやすいと思います。

例として ret=results||[] を考えます。results に値がある場合、result=[] になります。

このような意図により、プログラマーは if 判断を大幅に節約できます。最後に、これは実際には C# の IL と同じですが、JS の最下層が if 判断を行ってくれることを付け加えておきます。

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