這是一個讓人們接觸到JavaScript的常見錯誤。
if(this.myData.myValue){ ...
// throws: Uncaught TypeError: Cannot read property 'myValue' of undefined`
許多人會看myValue
的問題,但如果你讀了錯誤仔細它說,它不能找到屬性未定義myValue
。這不是myValue
是問題,但myData
未定義,因此不能具有任何屬性。我個人希望該錯誤讀取Uncaught TypeError: 'myData' is undefined and has no property 'myValue'
,因爲這會阻止很多人陷入問題所在。
undefined
是javascript中的一個特殊對象,隨處可見。 undefined
相當於false。 undefined
已分配給未啓動的對象。尚未定義的對象等於undefined
。具有值undefined
的對象不放置在JSON文件中。 undefined
在JSON文件中是不允許的,除非它是一個字符串。具有值undefined
的對象不能有屬性。 undefined
是一種原始類型。
例子
var myObj; // declare a variable without a value. It automatically gets undefined
// you can check if the object has a value
if(myObj === undefined){ // will be true if myObj has no value
// this does not mean it has been declare
if(myOtherObj === undefined){ // will return true as well even thought myOtherObj has not been declared
要檢查一個變量是否被宣佈無效使用0
// from above code snippet
if(myObj === void 0){ // is true because myObj has been declared
if(myOtherObj === void 0){ // is false because myOtherObj has not been declared.
很多人用的那種切斷,以確定是否一個對象是不確定的。如果你不小心,這可能會導致問題。
if(!myObj){ // will be true if my object is undefined.
// this is bad practice because the Numbers 0, the boolean false,
// the Object null are also equivalent to false;
myObj = 0
if(!myObj){ // the test intended to find out if myObj has been defined fails
myObj = false
if(!myObj){ // again the test fails.
myObj = null
if(!myObj){ // again.
我一直堅持認爲,人們用一個確切的操作===
來測試undefined
if(myObj === undefined){
與C/C++和其他類似的語言條件語句的順序總是從左到右進行。只要知道它失敗,JavaScript就會退出條件語句。這對於未定義的測試非常方便
以下內容也是解決問題的方法。
var myObj;
if(myObj !== undefined && myObj.myProperty){ // this will not crash
// because if myObj is undefined
// it will exit at the first
// condition.
// on the other hand this will
if(myObj.myProperty && myObj !== undefined){ // this will throw an error if
// myObj is undefined
undefined
相當於一些其他類型的javascipt的
undefined == null // true
undefined == false // false
undefined == 0 // false
undefined === null // false
undefined === false // false
undefined === 0 // false
// be careful as the ! operator changes things a little
var a = undefined;
!a //true
a = 0;
!a // true
a = null;
!a // true
a = false;
!a // true
JSON文件不能有未定義的值。
{
"myObj" : undefined
}
// this is not a valid JSON file.
當stringifing的目的是JSON有undefined值不會被添加到JSON字符串
var myObj = {
propA : 0,
propB : "hello",
propC : undefined,
propD : null
};
var str = JSON.stringify(myObj); // will create the JSON string
{
"propA" : 0,
"propB" : "hello",
"propD" : null
}
// not that propC does not appear in the JSON
undefined
是JavaScript的一個複雜的野獸所有對象最好是熟悉其用途。
瞭解更多
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined
'lookuptextvalue.name_Value'不存在,但你正在努力尋找它的屬性,這將拋出一個錯誤。首先檢查它是否存在,然後檢查值是否等於true if(lookuptextvalue.name_Value && lookuptextvalue.name_Value.value){' 順便說一句,你應該花一些時間學習一個好的代碼佈局風格,你很混亂,風格不好隨着代碼變得越來越複雜,將很難找到錯誤和問題。 – Blindman67
@ Blindman67 thakns您的建議和解決方案。有效。你能給我一些學習的鏈接嗎? – Eldanar
查看道格拉斯克羅克福德,他有YouTube研討會,講座,書籍等等。他創建了JSON和JSLint。他的方式一開始似乎有些迂腐,但非常值得學習。良好的代碼風格非常重要,個人而言,它是成爲一名優秀程序員最重要的部分。 – Blindman67