2012-06-27 59 views
0

我看到逗號串聯在JavaScript中的原始數據類型,並想知道是否有任何區別使用逗號說+運算符以及.concat()函數?使用逗號+ +來連接JavaScript中的基本類型有什麼好處嗎?

所以一個例子,下面的語句給我ABC

var value1 = a, value2 = b, value3 = c; 
document.write(value1,value2,value3); 
+0

這是否工作取決於函數....'var a ='a','b','c';'會做出與您預期不同的事情。 –

+0

@Felix Kling - 我沒有意識到'var a ='a','b','c''是有效的。 – PeanutsMonkey

+0

@FelixKling他正在談論document.write()vs contatenating。 – rcdmk

回答

1

由於字符串連接是計算的haviest操作之一,採用document.write各種參數將執行更好。

參見該測試(它有時掛在IE,所以用其它的瀏覽器請)http://jsperf.com/document-write-vs-concatenation

闡釋:

document.write("val1", "val2", "val3"); 

相當於

document.write("val1"); 
document.write("val2"); 
document.write("val3"); 

因此,爲要快得多,因爲它不會連接字符串。

2

蘋果和桔子。在你的例子中沒有任何東西被連接在一起;您只需指定3個參數給write()函數。

document.write(exp1, exp2, exp3, ...)接受多個參數,並且當給定多個參數時,它將遍歷所有參數,就好像您在每個參數上單獨調用write()一樣。

但是,在評估用於處理多個表達式並返回最後一個表達式的表達式時,逗號確實有用。要看到,在動作你需要用一組括號中的參數,使之形成一個參數:

document.write("a","b","c") // abc 
document.write(("a", "b", "c")) // c 

alert("a","b","c") // a 
alert(("a","b","c")) // c 
alert((x=2, ++x)) // 3 
0

在大多數瀏覽器中(IE < = 8,Gecko)使用+運算符的字符串串聯性能很差。

例如,在我的公司,我們必須逐一拼湊一個大的HTML片段。在這種情況下,我們有這樣的事情:

var id = 123; 
var html = []; 
html.push('<div id="', id, '">hello</div>'); 
var result = html.join(''); 

在你有級聯的地段的情況下,這比下面的更好:

var id = 123; 
result = '<div id="' + id + '">hello</div>'; 

因此,要回答你的問題 - 它實際上取決於關於情況。如果將多個字符串連接在一起,由於性能較差,不應使用+運算符。但99%的時間應該沒問題,但性能增益如此之小,嘗試其他任何東西都是痛苦的。但是,如果實際上有逗號分開的選項(如array.push或document.write),那麼您應該明確地利用它。

+0

在較老的IE中,'+'運算符並不特別「可怕」。我認爲你用化合物'+ ='操作符混淆了它,這很慢。 – RobG

+0

順便提一下,在IE 8中,使用推送/連接比連接(+和+ =)要慢得多。因此,如果您打算幫助IE性能,請避免* push *並將其分配給索引屬性。 – RobG

相關問題