2013-04-17 52 views
0

所以,這是爲了安全登錄。我通過鉻的JavaScript控制檯運行這個,我得到'未捕獲的ReferenceError:在賦值中無效的左側'?!請幫忙!Javascript console說:無效的左側分配?

function logIn() { 
String.prototype.hashCode = function() { 
     for(var ret = 0, i = 0, len = this.length; i < len; i++) { 
     ret = (31 * ret + this.charCodeAt(i)) << 0; 
    } 
     return ret; 
    }; 

var user = document.getElementById("username"), 
    pass = document.getElementById("password"); 
if ((user = "Fedora") && (pass.hashCode() = -976887139)) { 
    window.alert("Captain Fedora: SuperUser"); 

} 
} 
+1

避免使這種做法的切割技巧稱爲尤達條件,訓練自己寫如果這樣的語句:'if(「Fedora」== user){',that如果你忘記第二個等於,你會得到一個例外,因爲if語句是有效的JavaScript中的技術分配。 –

+0

通過驗證器(如http://jshint.com/)運行您的代碼,以幫助您進行基本的調試。 – 2013-04-18 00:21:12

回答

3
if ((user = "Fedora") && (pass.hashCode() = -976887139)) 

應該

if ((user == "Fedora") && (pass.hashCode() == -976887139)) 

所以你做對比,而不是分配

+0

甚至可以用比較''==='來比較類型。 –

0

是,pass.hashCode() = -976887139assignment。由於函數調用不是return a reference,因此分配給它是無效的。你可能希望comparison

pass.hashCode() == -976887139 

而且,你會希望得到那些DOM元素的values(我不能相信的密碼輸入一個hashCode方法的話),你也想比較該字符串的user變量的內容而不是分配它們。

var user = document.getElementById("username").value, 
    pass = document.getElementById("password").value; 
if (user == "Fedora" && pass.hashCode() == -976887139) { 
    window.alert("Captain Fedora: SuperUser"); 
} 
0
if ((user = "Fedora") && (pass.hashCode() = -976887139)) 

變化

if ((user == "Fedora") && (pass.hashCode() == -976887139)) 

也 'reuturn RET' 可能是因爲在錯誤的範圍返回undefined。 var ret = 0只適用於'for'範圍

相關問題