我在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。
答案 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