MSCRM 2011 Javascript条件问题

时间:2015-08-26 07:52:08

标签: javascript if-statement dynamics-crm

我在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(); } } } 上给我错误。

{{1}}

感谢Elda。

1 个答案:

答案 0 :(得分: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等同于假。 undefined被分配给未启动的对象。尚未定义的对象等于undefined。值为undefined的对象不会放在JSON文件中。除非是字符串,否则JSON文件中不允许undefined。值为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

要检查是否已声明变量,请使用void 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.

将对象字符串化为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