Drkcore

13 02 2011 javascript Tweet

javascriptの等値演算子(==)と同値演算子(===)

昨日の読書会で、等値演算子(==)と同値演算子(===)をきちんと理解していないことが判明したので、サイ本を読んでみた。

Javascriptは、数値、文字列、論理値が等しいかどうかを「値により」判定します 一方オブジェクトや配列、関数の場合には「参照により」判定します

オブジェクト、配列、関数の場合には参照により判断されるので

$ ./shell 
V8 version 3.0.6.1
> [1,2,3] == [1,2,3]
false
> [1,2,3] === [1,2,3]
false
> var a = b = [1,2,3]
> a == b
true
> a === b
true

同値演算子は型変換を行わないで値が等しいかどうかを評価するが、等値演算子は2つのオペランドの型が異なる場合には型変換を行う。

同値は演算子は直感に対して素直なのでいいとして、等値は型が異なる場合に次のルールーで型変換をする

  • どちらか一方が数値で他方が文字列の場合、文字列を数値に変換してから比較
  • どちらか一方がtrueの場合trueを1に、falseの場合には0に変換してから比較
  • オブジェクトと数値の比較の場合オブジェクトを基本形に変換してから比較

改めてJGPのB1(p.127)を見てみる。

> '' == '0'
false
> '' == 0 
true
> 0 == '0'   
true

最初の例は文字列の比較なのでfalse。二番目は文字列と数字の比較で型変換されて''はfalseなので数値に変換されると0になるのでtrue。最後は文字列'0'が数値0に変換されて比較されるのでtrueか。

ProductName JavaScript: The Good Parts ―「良いパーツ」によるベストプラクティス
Douglas Crockford
オライリージャパン / 1890円 ( 2008-12-22 )


ProductName JavaScript 第5版
David Flanagan
オライリー・ジャパン / 4410円 ( 2007-08-14 )


About

  • もう5年目(wishlistありマス♡)
  • 最近はPythonとDeepLearning
  • 日本酒自粛中
  • ドラムンベースからミニマルまで
  • ポケモンGOゆるめ

Tag

Python Deep Learning javascript chemoinformatics Emacs sake and more...

Ad

© kzfm 2003-2021