2016-12-25 19 views
0

我正在編寫一個JavaScript腳本,當用戶按下鍵盤上的某個鍵時,如果它是指定的鍵之一,腳本將播放相應的聲音。如果用戶按下的鍵不是聲音鍵,例如「R」,那麼我希望腳本結束。現在,它返回:「不能設置屬性的'currentTime'爲null」即使我試圖用if(audio == false)return來結束它;爲什麼不使用代碼塊中的return來結束我的函數?不知道爲什麼我總是收到「無法設置屬性'currentTime'爲null」

我也很好奇編寫條件語句後,代碼塊在同一行上的規則是什麼。 (我下面的教程,它是第一次我看到它這樣做的方式。)

<script> 
    window.addEventListener("keydown", function(e){ 
    var audio = document.querySelector(`audio[data-key="${e.keyCode}"]`) 
    console.log(audio) 

    // this function stops the function if you press a button that doesn't have a corresponding sound 

    if (audio == false) return; 

    audio.currentTime = 0; 
    audio.play(); 
    }); 
</script> 
+0

你應該有明確===檢查空。在交互式控制檯中,嘗試輸入'false == null'並看看你得到了什麼。這個東西的規則是有點挑剔,所以默認顯式檢查,除非你確定它們是如何應用的。 – pvg

回答

0

在JavaScript中,如果document.querySelector結果不存在,也不會設置audiofalse,它將返回null。這意味着audio == false不會返回true

你可能想這樣的:

if(audio === null) 
+0

當我實現這個代碼時,當我按下沒有音頻聲音的按鍵時,它仍然記錄'null'。在這個例子中,它沒有得到null,這正是我想要實現的。 –

+1

我猜它記錄爲空,因爲你有console.log(音頻)才運行。 – Brian

0

這是因爲只有undefined和null本身是抽象等於空。

console.log(null == null);  // true 
 
console.log(undefined == null); // true 
 
console.log(false == null);  // false

在這種情況下,我只想迫使布爾:

if (!audio) return; 
+0

你能告訴我更多關於你爲什麼使用1行和無括號的內容嗎?此外,當我執行此代碼時,當按下沒有音頻聲音的按鍵時,它仍然記錄爲「空」。在這個例子中,它使用相同的代碼,你推薦它,它不會得到空,但由於某種原因,我不斷得到它... –

+0

@FaiqueMoqeet這就像'if(!audio){return; }'。如果你有一個單獨的陳述,你不需要大括號。 – Oriol

+0

好吧,我想,從來沒有遇到過它。謝謝。 –

相關問題