2015-08-26 78 views
1

我在將條件放在javascript上時出現問題。 在我使用下面的代碼的情況下。當我手動輸入材料代碼時,一切正常,但是當我使用搜索幫助時,它給了我一個錯誤。當我在調試器上檢查它時,我會看到兩種基於我的輸入代碼的方法。 你能幫我改進我的代碼嗎,它不能正常工作。 如果我使用搜索幫助輸入材料代碼,則會在步驟if (lookuptextvalue.name_Value.value)上發生錯誤。MSCRM 2011 Javascript條款問題

function matName() { 
var lookupObject = Xrm.Page.getAttribute("new_material"); 

if (lookupObject != null) 
{ 
    var lookUpObjectValue = lookupObject.getValue(); 
    if ((lookUpObjectValue != null)) 
    { 
    var lookuptextvalue = lookUpObjectValue[0].keyValues; 
    if (lookuptextvalue.name_Value.value) { 
    var lookuptextvaluex = lookUpObjectValue[0].keyValues.name_Value.value; 
    } 
    else if(lookuptextvalue.name.value) { 
    var lookuptextvaluex = lookUpObjectValue[0].keyValues.name.value; 
    } 
    var lookupid = lookUpObjectValue[0].id; 

    Xrm.Page.getAttribute("new_matname").setValue(lookuptextvaluex); 
    } 
    else { 
    Xrm.Page.getAttribute("new_matname").setValue(); 
} 
} 
} 

謝謝埃爾達。

+0

'lookuptextvalue.name_Value'不存在,但你正在努力尋找它的屬性,這將拋出一個錯誤。首先檢查它是否存在,然後檢查值是否等於true if(lookuptextvalue.name_Value && lookuptextvalue.name_Value.value){' 順便說一句,你應該花一些時間學習一個好的代碼佈局風格,你很混亂,風格不好隨着代碼變得越來越複雜,將很難找到錯誤和問題。 – Blindman67

+0

@ Blindman67 thakns您的建議和解決方案。有效。你能給我一些學習的鏈接嗎? – Eldanar

+0

查看道格拉斯克羅克福德,他有YouTube研討會,講座,書籍等等。他創建了JSON和JSLint。他的方式一開始似乎有些迂腐,但非常值得學習。良好的代碼風格非常重要,個人而言,它是成爲一名優秀程序員最重要的部分。 – Blindman67

回答

0

這是一個讓人們接觸到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