そーす

I'm a programmer in Fukuoka. Please contact me saubre.app[at]gmail.com or Twitter DM.

JavaScriptの比較演算子の話

stackoverflow.com

これ、よく思いつくなーと感心しました。

普段等価演算==使うことないのですが、==の場合だと上記の回答のようなことができるようです。

valueOfでも大丈夫だって書いてあったのですが、toStringvalueOfどっちも定義されている場合、toStringが呼ばれることはありませんでした。

% node
> const a = { toString: () => console.log("toString"), valueOf: () => console.log("valueOf") };
undefined
> a
{ toString: [Function: toString], valueOf: [Function: valueOf] }
> a == 1
valueOf
false
> a == "1"
valueOf
false
> a === 1
false
> a === "1"
false
>

valueOfのリファレンスには

developer.mozilla.org

文字列型の文脈にあるオブジェクトは toString メソッドを通じて変換されますが、

とあるんですが、

> console.log(a + " string")
valueOf
undefined string
undefined

文字列の文脈って上記のようなやつは違うんですかね。