アカウント名:
パスワード:
ES5 の tyoeof 演算子 [github.io] の仕様は心から何とかしてほしいですが、ES6 の typeof 演算子 [mozilla.org] でも手を入れられる様子がありません…。
typeof null === 'object' ; // Null 型なのに "object"typeof new Function === 'function'; // Object 型なのに "function"typeof arg === 'hoge'
null は !object で判別すれば特に困ることはないと思う。undefined も同じだけど null と undefined を区別したい時は typeof 使えば undefined を区別出来るから問題ないよ。
null は !object で判別すれば特に困ることはないと思う。
Null 型に関しては仰るとおり、値で判定すれば良いので実質的には困っていないのですが、型を判定する演算子として用意された「typeof演算子」が「型」となる文字列以外を返している事から統一性がない現状を生み出しており、混乱の元となっている点は否めないと思います。
特に「Object 型として返す文字列値」の広範さは何なんですか、と軽く怒りを覚えます。ES5 までは Object 型の判定として下記コードにようにしていました。https://gist.github.com/think49/887049/38781c5081dd6845fe0d2169192ff4a... [github.com]
ところが、ES6 になって Symbol 型が増えて上記コードは Symbol 型の値を渡したときに期待通りに動作しません。仕方なく、型が増えてもある程度は対応できるように下記コードに修正しました。https://gist.github.com/think49/887049 [github.com]
このコードも ToObject で例外を返す型が増えれば破綻します。いい加減、Object 型を判定するネイティブ機能が実装されて欲しいものです。ES6 で実装予定だった Object.isObject はいつの間にか仕様から外されましたが、どうにかならないものですかね…。
undefined も同じだけど null と undefined を区別したい時は typeof 使えば undefined を区別出来るから問題ないよ。
私も Undefined 型には特に問題点は感じないですね。var undefined で undefined が上書きできてしまう問題も ES5 で対策されましたし。
なるほど、詳しい説明どうも。typeof null の結果は JavaScript の最大の設計ミスと言われてるし…。たけど、Symbol についてはまだ不勉強でよく分かってなかった。教えてもらったコード見ながら、ちょっと調べてみようと思う。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
一つのことを行い、またそれをうまくやるプログラムを書け -- Malcolm Douglas McIlroy
JavaScript (ECMAScript 5) の typeof 演算子 (スコア:1)
ES5 の tyoeof 演算子 [github.io] の仕様は心から何とかしてほしいですが、ES6 の typeof 演算子 [mozilla.org] でも手を入れられる様子がありません…。
Re: (スコア:2)
null は !object で判別すれば特に困ることはないと思う。
undefined も同じだけど null と undefined を区別したい時は typeof 使えば undefined を区別出来るから問題ないよ。
Re:JavaScript (ECMAScript 5) の typeof 演算子 (スコア:1)
Null 型に関しては仰るとおり、値で判定すれば良いので実質的には困っていないのですが、型を判定する演算子として用意された「typeof演算子」が「型」となる文字列以外を返している事から統一性がない現状を生み出しており、混乱の元となっている点は否めないと思います。
特に「Object 型として返す文字列値」の広範さは何なんですか、と軽く怒りを覚えます。
ES5 までは Object 型の判定として下記コードにようにしていました。
https://gist.github.com/think49/887049/38781c5081dd6845fe0d2169192ff4a... [github.com]
ところが、ES6 になって Symbol 型が増えて上記コードは Symbol 型の値を渡したときに期待通りに動作しません。
仕方なく、型が増えてもある程度は対応できるように下記コードに修正しました。
https://gist.github.com/think49/887049 [github.com]
このコードも ToObject で例外を返す型が増えれば破綻します。
いい加減、Object 型を判定するネイティブ機能が実装されて欲しいものです。
ES6 で実装予定だった Object.isObject はいつの間にか仕様から外されましたが、どうにかならないものですかね…。
私も Undefined 型には特に問題点は感じないですね。
var undefined で undefined が上書きできてしまう問題も ES5 で対策されましたし。
Re:JavaScript (ECMAScript 5) の typeof 演算子 (スコア:2)
なるほど、詳しい説明どうも。
typeof null の結果は JavaScript の最大の設計ミスと言われてるし…。
たけど、Symbol についてはまだ不勉強でよく分かってなかった。
教えてもらったコード見ながら、ちょっと調べてみようと思う。