ホームページ  >  記事  >  ウェブフロントエンド  >  JavaScript、値、セミコロンの素朴な基本

JavaScript、値、セミコロンの素朴な基本

高洛峰
高洛峰オリジナル
2017-02-25 15:39:351111ブラウズ

Value

次のコードのように、JavaScript 解析エンジンが変数の値をどのように区別するのか疑問に思うことがあります。

var x = 'javascript'; //javascript
x = "hello"; // hello
x = 555; //555
x = null; //null
x = a; //a is not defined
x = true; //true

は数値への直接代入です。これには多様性がなく、数値は数値です。ただし、プログラミング言語では英語が文字列または参照される別の変数である可能性があるため、値が英語である場合を区別するのは困難です。したがって、変数と文字列を区別する方法は、プログラミング言語では変数と文字列を区別するために引用符で囲むことがよくあります。 Java などの一部の言語では、一重引用符と二重引用符も区別されます。一重引用符は文字を囲み、二重引用符は文字列を囲みます。ただし、JavaScript では文字と文字列を区別せず、両方を文字列として扱うため、JavaScript では一重引用符と二重引用符に違いはありません。

引用符は変数と文字列を区別するために使用できますが、たとえば、上記のコードでは x を null に割り当てました。では、これらのプログラミング言語はどのようにして変数とキーワードを区別するのでしょうか?

null = 123;
console.log(null); //Uncaught ReferenceError: Invalid left-hand side in assignment
undefined = 456;
console.log(undefined); //undefined

上記では、null と unknown にそれぞれ別の値を割り当てました。その結果、null に値を代入するときはエラーが報告され、unknown に値を代入するときはエラーは報告されませんでしたが、成功しませんでした。 。おそらく、null と unknown の場合は、それらが値です。変数は値を探します。 JavaScript が変数とキーワードをどのように区別するかについて話すとき、最終的には JavaScript が変数と値をどのように区別するかということになるかもしれません。

セミコロン

一部の JS プラグインでは、よく次のようなコード行が表示されます

;(function(){
 .........
})();

コードの先頭にセミコロンがありますが、このセミコロンは何に使われるのでしょうか? ?

セミコロンがコードの終わりを表すことはわかっていますが、問題は JavaScript ではセミコロンを記述できないため、コードの終わりはユーザーではなくプログラムによって決定されるという問題が発生します。また、プログラムは万能ではありません。多くの場合、作成したコードがそのルールに従わない場合、最終的な結果は満足のいくものとはなりません。

以下はセミコロンを省略するためのJavaScript解析ルールです

var a
=
1 + 2
console.log(a) //3

JavaScriptパーサーは上記のコードを

var a = 1 + 2;
console.log(a); //3

に解析しますJavaScriptが2の後にセミコロンを追加しない場合、それはできません解析できない場合、JavaScript パーサーはセミコロンを追加しようとし、それでも解析できない場合はエラーが報告されるとも言えます。別の例は次のコードです

​​

var a = 10;
var b = 5;
var c = a + b
(a + b).toString()
// b is not a function

これは b が関数ではないことを示しています。これは、上記のコードが次のコードに解析される可能性が高いことを意味します

var a = 10;
var b = 5;
var c = a + b(a + b).toString();

() を関数として扱います電話。また、JavaScript パーサーは可能な限り多くの一致を照合しますが、retrun、break、および continue などのいくつかの例外があり、JavaScript パーサーがこれらのキーワードを解析する場合、改行後の内容は変更されません。独自のコードとして扱いますが、改行の直前にセミコロンを追加します。次のコードを見てください。

function test(){
 return 
 123;
}
console.log(test()); //undefined

これは 123 を返しません。これは、retrun の直後にセミコロンを追加することを意味します。

振り返ってみると、なぜプラグイン開発者はコードの最初の行にセミコロンを追加するのでしょうか?

プラグインなので、他の人が使うのは当然ですよね? しかし、重要な問題は、このプラグインを使用する人がどのようにコードを書いているかがわからないことです。それはまったくの誤りです。そのコードは私たちと何の関係があるのでしょうか?

ユーザーのコードが私たちのコードに影響を与える場合、それはどのように影響しますか?たとえば、次のようなコードを作成しています

<script src="test.js"></script>
<script src="zmz.js"></script>

最初のスクリプトはユーザー自身が記述し、2 番目のスクリプトは導入されたプラグインです。では、ブラウザはこれら 2 つのスクリプトをどのように解析しますかどうですか?テストしてみましょう

test.js

var a
a

zmz.js

(1+2)

実行すると、エラーが報告されていないことがわかります。それはSay JavaScript parsing 前のファイルにはセミコロンが含まれていないため、コンパイラは、後のファイル内のコードと一緒にコードを解析しません。

問題はここではありませんが、HTTP に関する本を読んだだけかもしれません。すごい、ファイルをマージするとリクエストの数を減らすことができることが判明したため、2 つのスクリプトが 1 つに統合されました。こんな感じになりました

var a
a(1+2)

プラグインの先頭にセミコロンを付ければ、このようなことは起こらないと思います。

var a
a;(1+2)

したがって、セミコロンをコードの特定の部分を終了するためにのみ使用すると考えないでください。コードの特定の部分を分離し、他のコードの間に線を引くためにも使用できます。

JavaScript、値、セミコロンの素朴な基本に関連するその他の記事については、PHP 中国語 Web サイトに注目してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。