「void 0」と「undefined」の違い

裸足のandres:

"Closure Compiler"を使用していますが、スクリプトをコンパイルするとき、次のことを行います。

コンパイルする前に:

// ==ClosureCompiler==
// @compilation_level SIMPLE_OPTIMIZATIONS
// @output_file_name default.js
// @formatting pretty_print,print_input_delimiter
// ==/ClosureCompiler==

var myObj1 = (function() {

  var undefined;   //<----- declare undefined

  this.test = function(value, arg1) {

    var exp = 0;
    arg1 = arg1 == undefined ? true : arg1;  //<----- use declare undefined
    exp = (arg1) ? value * 5 :  value * 10;

    return exp;
  };

  return this;
}).call({});

var myObj2 = (function() {

  this.test = function(value, arg1) {

    var exp = 0;
    arg1 = arg1 == undefined ? true : arg1;  //<----- without declare undefined
    exp = (arg1) ? value * 5 :  value * 10;

    return exp;
  };

  return this;
}).call({});

編集済み:

// Input 0
var myObj1 = function() {
  this.test = function(b, a) {
    a = a == void 0 ? true : a;  //<-----
    var c = 0;
    return c = a ? b * 5 : b * 10
  };
  return this
}.call({}), myObj2 = function() {
  this.test = function(b, a) {
    a = a == undefined ? true : a; //<-----
    var c = 0;
    return c = a ? b * 5 : b * 10
  };
  return this
}.call({});

これにより、「void 0」と「undefined」の使用についての質問は、使用に違いがあるのでしょうか、それとも2つのケースは問題ないのでしょうか。

編集する

「void 0」でコンパイルされた「var undefined」を定義した場合、「undedined」でコンパイルされた「undefined」を定義しなかった場合、「undefined」と「void 0」の間の文字数は問題になりません。

テスト

編集II:このリンクに基づくパフォーマンス

コードとテスト

IE 8:
typeof:228ms
undefined:62ms
void 0:57ms

Firefox 3.6:
typeof:10ms
未定義:3ms
void 0:3ms

Opera 11:
typeof:67ms
undefined:19ms
void 0:20ms

Chrome 8:
typeof:3ms
undefined:5ms
void 0:3ms

マットボール:

MDNから

voidオペレータは、与えられた評価expressionし、次いで戻りますundefined

この演算子を使用すると、未定義に評価される式が必要な場所に、副作用を生成する式を挿入できます。

多くの場合、void演算子はundefinedプリミティブ値を取得するためにのみ使用され、通常は " void(0)"(" "と同等void 0)を使用します。このような場合は、undefined代わりにグローバル変数を使用できます(デフォルト以外の値に割り当てられていない場合)。

閉鎖コンパイラはにスワップしvoid 0、それはより少ない文字が含まれているためundefinedそのため同等の、より小さなコードを生成します


Re:OPコメント

はい、私はドキュメントを読みましたが、私が与えた例では、「ボイド0」と別の「未定義」を使用する場合の「グーグル閉鎖」

これは実際にはGoogle Closure Compilerのバグだと思います

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

C ++でのvoid(*)()とvoid(&)()の違い

分類Dev

(void)objとvoid(obj)の違い

分類Dev

self.completionBlock = ^ {}と(void)(^ completeBlock)(void)= ^ {}の違い

分類Dev

decltype(...、void())とvoid_tの違い

分類Dev

decltype(void())とdecltype(void {})の違い

分類Dev

AutoとVoidの違いは?

分類Dev

AutoとVoidの違いは?

分類Dev

(void(*)(void *))の意味

分類Dev

なぜ `void * = 0`と` void * = nullptr`が違いを生むのですか?

分類Dev

AsyncTask <Void、Void、Void>の拡張

分類Dev

マクロの「do {...} while(0)」と「{...}((void)0)」の実際的な違いは?

分類Dev

void()とint()の解析の違い

分類Dev

Mono <Void>とMono.empty()の違い

分類Dev

Objective-C:idとvoidの違い*

分類Dev

「C ++ void Pointer」と「C#var」の違い

分類Dev

void inject(Activity activity)とSomeComponent getSomeComponent()の違い

分類Dev

Dart 2:Future <void>とFuture <Null>の違い

分類Dev

C ++:contructor()とconstructor(void)の違い

分類Dev

C ++のvoid関数と非void関数の違い

分類Dev

java.lang.Voidとvoidの違いは何ですか?

分類Dev

<T extends A> void foo(T t)とvoid foo(A a)の違い

分類Dev

void insertElementAt(Object obj、int index)とvoid set(int index、object o)の違い

分類Dev

(void *)と(void(*)(argument type))キャストの違いは何ですか?

分類Dev

void関数(stuct * s)とvoid関数(stuct s)の違いは何ですか?

分類Dev

public voidメソッドとvoidメソッドの違いは何ですか?

分類Dev

(void *)1の意味?

分類Dev

Cのvoid型

分類Dev

void operator()()の理解

分類Dev

Voidの使用例

Related 関連記事

  1. 1

    C ++でのvoid(*)()とvoid(&)()の違い

  2. 2

    (void)objとvoid(obj)の違い

  3. 3

    self.completionBlock = ^ {}と(void)(^ completeBlock)(void)= ^ {}の違い

  4. 4

    decltype(...、void())とvoid_tの違い

  5. 5

    decltype(void())とdecltype(void {})の違い

  6. 6

    AutoとVoidの違いは?

  7. 7

    AutoとVoidの違いは?

  8. 8

    (void(*)(void *))の意味

  9. 9

    なぜ `void * = 0`と` void * = nullptr`が違いを生むのですか?

  10. 10

    AsyncTask <Void、Void、Void>の拡張

  11. 11

    マクロの「do {...} while(0)」と「{...}((void)0)」の実際的な違いは?

  12. 12

    void()とint()の解析の違い

  13. 13

    Mono <Void>とMono.empty()の違い

  14. 14

    Objective-C:idとvoidの違い*

  15. 15

    「C ++ void Pointer」と「C#var」の違い

  16. 16

    void inject(Activity activity)とSomeComponent getSomeComponent()の違い

  17. 17

    Dart 2:Future <void>とFuture <Null>の違い

  18. 18

    C ++:contructor()とconstructor(void)の違い

  19. 19

    C ++のvoid関数と非void関数の違い

  20. 20

    java.lang.Voidとvoidの違いは何ですか?

  21. 21

    <T extends A> void foo(T t)とvoid foo(A a)の違い

  22. 22

    void insertElementAt(Object obj、int index)とvoid set(int index、object o)の違い

  23. 23

    (void *)と(void(*)(argument type))キャストの違いは何ですか?

  24. 24

    void関数(stuct * s)とvoid関数(stuct s)の違いは何ですか?

  25. 25

    public voidメソッドとvoidメソッドの違いは何ですか?

  26. 26

    (void *)1の意味?

  27. 27

    Cのvoid型

  28. 28

    void operator()()の理解

  29. 29

    Voidの使用例

ホットタグ

アーカイブ