我們都知道,js在寫**的時候,在每一行最後是可以不寫分號 「;」 的,因為js會自動幫我們加上分號。不過,js的這種機制做的並不好。實際上,js並不是在每一行結尾加上分號,而是當你這行**能夠正常被解析的時候,就會在結尾加上分號,如果不能解析,則合併下一句**,直到可以解析為止。例如:
b =
上面的**會解析成:b = 1;
有這麼一種情況:當我某一行**不寫分號,而下一行**是以「(」 開頭的,即使這行語句是可解析的語句,也會將兩行**合併為一行進行解析。正是因為這種機制,所以在js中寫**的時候,會出現一些跟你意料中不一樣的結果。比如說:
a = 1
(a + 2).tostring()
上面的**我們認為它會這樣執行:
a = 1;
(a + 2).tostring();
但事實上,它是這樣執行的:
a = 1(a +2).tostring();
最終結果:uncaught referenceerror: a is not defined
當我們使用封閉函式的時候,不加分號也可能會發生這種錯誤:
var a = 1
(function(){})()
上面的的語句會這樣執行:
var a = 1(function(){})()
最終結果:uncaught typeerror: 1 is not afunction
JS變數的一些問題
es5變數提公升 變數提公升 es5 變數提公升 宣告 declare var a function sum 預設值undefined 定義 defined a 12 就是賦值操作 var 只宣告未定義 function 的宣告和賦值,定義 變數提公升只發生當前作用域 開始載入的時候只對全域性作用域...
關於JS一些驗證郵箱的一些問題
if type email w w w ig strreg a za z0 9 a za z0 9 a za z0 9 strreg 0 9a za z 0 9a za z 0 9a za z 0 9a za z strreg a za z0 9 a za z0 9 a za z0 9 a za z...
String 一些問題
前言 等號 對於基本型別,比較的是值,對於引用型別,比較的是記憶體位址。1.在物件池中建立,如果常量池中已經存在則返回常量池中已經有的。private static void test1 結果 true 2.乙個在string pool中,乙個在堆中。private static void test...