> "[object Number]" === Object.prototype.toString.call(1) // #1
< true
> "[object Number]" === {}.toString.call(1) // #2
< true
> {}.toString.call(1) === "[object Number]" // #3
< SyntaxError: Unexpected token '.'
> ({}).toString.call(1) === "[object Number]" // #4
< true
> {}.toString.call(1) // #5
< SyntaxError: Unexpected token '.'
> !{}.toString.call(1) // #6
< false
> test = {}.toString.call(1) // #7
< "[object Number]"
サンプルからわかるように、#2と#3は、左右が入れ替わっている以外はほぼ同じです。 #2は正常に動作しますが、#3は構文エラーです。 #3を動作させるには、一対の括弧が必要です。さらに、#5-7から、{}
が一番左にない限り、正常に動作することがわかります。シンタックス空のオブジェクトの属性に直接アクセスしたときのエラー
なぜですか?
'{}'はオブジェクトリテラルであり、変数には割り当てられていないと考えられます。したがって、まだオブジェクトに初期化されていません。スコープ – Rajesh
'{}}の可能性を考慮すると、' {} 'はその場合のブロックになります。 – Xufox
@Xufox:なぜそれがブロックですか?コンソールに '{}'と入力すると、オブジェクト '{}'が返されます。また、これはノードではなくデスクトップブラウザでテストされます。 – edward