2012-01-11 45 views
18

有這種想法圍繞運行的「警報()是」。「警報不好」 - 真的嗎?

致謝:

  • 當然,我們很少想用它在實際的UI設計,因爲有更好的方式與用戶溝通。
  • 對於調試,console.log()alert()更多的價值。
  • 某些情況下(如使用setTimeout)遇到問題時alert()幫倒忙。
  • 實際調試器手柄暫停和執行比alert()更好的恢復,如果這就是開發者需要。

問題:

  1. 是否有一個堅實的,合乎邏輯的理由來從未使用alert()
  2. 是否的console.log()增加值真正減少alert()值這麼厲害,它從「有用在有限的情況下」到「壞」去?
  3. 你是什麼的人誰願意在一個簡短的測試,其中日誌記錄不設置爲使用alert()說任何的副作用是不相關的(想想教程或快速原型)?
+6

我從來沒有聽說過這樣的想法在這個整體的可更換alert功能 - 你能舉一個來源?重新3.)使用它。 'alert()'沒有什麼錯,除了你上面承認的東西。 – 2012-01-11 19:28:01

+0

你可以分享關於「alert()很糟糕」的想法嗎? – maerics 2012-01-11 19:28:47

+0

@Pekka:看起來你應該讓這個評論成爲答案。 :) – 2012-01-11 19:28:50

回答

8
  1. 沒有,它只是一個語言功能,並沒有理由從未使用alert()
  2. alert()作品不同於console.log(),也console並不總是可用的,所以console.log()可以減少alert()價值,但肯定不能隨時更換
  3. 解釋如何console.log()alert()不同,尤其是alert()必須輸出字符串,所以必須先在值轉換爲字符串 - 如果你要檢查什麼價值,你必須在某個時候它是非常重要的,你選alert()完成這項任務。 它也停止執行腳本(這可能有時會有用)。

更多鏈接:

+0

好吧,它不是一個真正的「語言功能」,但我認爲這是挑剔的。 – jAndy 2012-01-11 19:31:38

+0

@zizozu:你對1和2的回答很好地處理了3。 – 2012-01-11 19:32:15

+0

'console.log(x.toString())'>>> alert(x)' – Raynos 2012-01-11 19:36:01

3

這是看齊,與 「永不使用表」 位。它旨在減少這種極其糟糕的設計的實例數量。這被認爲是糟糕的設計,因爲它阻止了額外的瀏覽器操作(如後退按鈕)和代碼執行(額外的JavaScript和頁面呈現),直到用戶單擊「ok」按鈕。該按鈕上的「ok」標籤不能更改,並且不適用於絕大多數用例。

有更好的方法來顯示錯誤信息,健全性檢查行動和確認對話框,所以使用它們。

存在「正確的」用例,例如當出於某種原因需要停止正常頁面流時,並且繼續加載頁面是危險的(安全)時。我想不出很多具體的例子,但他們在邊緣。某處。

+0

我喜歡這樣的評論:「有'正確的'用例..在邊緣,在某處。」 :) – 2012-01-11 19:35:38

+1

那些'正確的'用例最好用'confirm'然後'alert' – Raynos 2012-01-11 19:39:00

+0

@Raynos - 同意。 'alert()'必須有一個獨特的有效用例。 – 2012-01-11 19:44:12

1

你正在中斷用戶 - 如果他有很多標籤打開,並且你提醒他突然被引導到你的標籤。作爲用戶的屁股疼痛。這是我最大的擔心..

說了console.log不適用於所有的瀏覽器IE7對於一個不支持相同。

只要清楚爲什麼會有警報,那麼使用警報就沒有問題。

還警告是沒有用的日誌JS對象只能顯示字符串。

21

從來沒有使用alert()的堅實的邏輯理由嗎?

警報是壞的,只是因爲它沒有任何積極的特點,只有負面特徵

  • 塊整個瀏覽器
  • 塊的JavaScript線程
  • 只輸出字符串
  • 需要用戶交互繼續(這意味着您不能自動瀏覽器使用)
  • 被常見的彈出式窗口攔截器阻止
  • 沒有在非瀏覽器環境,如Node.js的工作(但是不執行console.log在node.js中工作)

是否執行console.log(增加值)真正減少值alert()如此劇烈以至於從「在有限情景中有用」到「壞」?

是的,雖然也有一些例外

的唯一價值警報已經是一個快速的hackish工具來調試舊版瀏覽器或騷擾用戶的工具。

+3

它阻止JavaScript和UI,因爲它們都運行相同的線程。 +1 – jAndy 2012-01-11 19:33:32

+3

@Raynos:謝謝你的嘗試,但是「這很糟糕,因爲我不知道爲什麼它很好」並不是合乎邏輯的理由不要使用它。 – 2012-01-11 19:34:08

+6

@JohnFisher沒有警報是壞的,因爲它阻止了整個瀏覽器_並且沒有任何理由使用它。真的,爲什麼你會使用它,永遠。 – Raynos 2012-01-11 19:35:12

0

那麼,你似乎回答了你的第一個原因列表的問題。

是否有堅實的邏輯原因從來沒有使用警報?

在調試網站時?是的,從來沒有使用alert()

從來沒有?也許太過分了。但是,對於大多數用戶而言,會帶來憤怒和沮喪。我從來沒有去過一個網站,我是很高興他們用一個警告對話框中斷我的訪問。

請問的console.log()增加值真正減少alert()值這麼厲害,它從「有用在有限的情況下」到「壞」去。

在調試應用程序的上下文中,我同意,alert()是壞的。我可以在console.log()中提供更多信息,這是一個詳細描述大量信息的整個JavaScript對象。在警告框中顯示的消息的靈活性並不那麼高。

你是什麼的人誰願意在一個簡短的測試,其中日誌記錄不設置使用警報()說任何的副作用是不相關的(想想教程或快速原型)?

alert()相比,輸入console.log()確實不是那麼難。你可以獲得更多,更有用的信息,並且爲良好實踐啓動你的編碼「肌肉記憶」。如果你始終使用良好的做法,他們會自然而然地給你。如果你一直使用不好的做法,他們也會自然而然地得到你。

最終,雖然這取決於你在做什麼。你在調試嗎?還是你想與用戶溝通?這是兩個不同的事情,需要不同的方法。

1

出於調試目的,alert有時會適得其反,但它是立竿見影的。在調試場景中使用alert的問題是它會中斷程序流。 console.log允許程序流程繼續。

你有什麼考慮裸雖然是console.log不是window一個標準特性,它的存在是因爲第三方工具,如螢火蟲,督察和IE開發者工具延伸,以與console對象實例的window對象。如果您在運行諸如Firebug之類的代碼時最終會在代碼中留下console.log聲明,則可能導致腳本失敗。

在實時代碼中使用alert似乎被忽視,但如果這是您希望提醒用戶的機制,那麼使用它是完全符合邏輯的。例如,如果他們嘗試並提交無效數據,則拋出alert("Please enter XXX");是完全有效的。當然,是否提供最好的用戶體驗是另一回事。

另外一個要考慮的是,如果想要,例如:

var oldAlertFunc = window.alert; 
window.alert = function(message) { 
    console.log(message); 
}; 
+1

這就像是說「當程序完成時關閉用戶計算機是完全有效的,當然,這是否提供了最好的用戶體驗是另一回事。」 – Raynos 2012-01-11 19:41:27

+3

大聲笑,不是真的一樣...結束用戶會話和扔一個消息框之間的巨大差異。 – 2012-01-11 20:46:16