显然,这行代码触发“预期的对象”:这个“对象预期”的JavaScript错误是怎么可能的?
var bPid = (b != null && typeof (b.processId) == "number") ? b.processId : 0;
不幸的是我无法通过代码在调试器中的步骤,因为这是一个间歇性错误,在Windows边栏小工具,我展示了写作。但是,我想有人应该能够告诉我,如果我正在做的所有检查尝试阻止这样的事情,甚至有可能获得对象预期。
显然,这行代码触发“预期的对象”:这个“对象预期”的JavaScript错误是怎么可能的?
var bPid = (b != null && typeof (b.processId) == "number") ? b.processId : 0;
不幸的是我无法通过代码在调试器中的步骤,因为这是一个间歇性错误,在Windows边栏小工具,我展示了写作。但是,我想有人应该能够告诉我,如果我正在做的所有检查尝试阻止这样的事情,甚至有可能获得对象预期。
您在致电b.processId
时未确定b
是否为对象。
看来b
不是一个对象,所以我会alert(b)
之前,看看它是否被赋予一个值。
即使它有一个赋值,它可能不是一个对象,所以你不妨要求typeof(b) == 'object'
。
您的变量b可能不存在。试试这个:
var bPid = (typeof b != "undefined" && typeof b.processId == "number") ? b.processId : 0;
最安全(和最短)的方式来检查,如果B变量是“truthy”(道格拉斯Crockford的条款)将
var bPid = (b && typeof (b.processId) == "number") ? b.processId : 0;
,除非你明确地想比较一下为null(在这种情况下,你应该比较===不会执行类型转换)。
而且'truthy'变量是除false,null,undefined,NaN,数字0或空字符串以外的任何变量。
不应该'typeof(b.processId)==“number”'阻止我在调用'b.processId'中例如,“b = 3”? – Domenic 2009-11-05 16:29:55
询问'typeof(b.processId)'使得JavaScript评估'b.processId'。如果'b'为数字3,则会导致''未定义''。如果'b'本身就是'undefined',则会导致错误。 – Tomalak 2009-11-05 16:33:05
我的印象是'typeof'的整点是让你测试一些属性是否存在而不实际取消引用。但是,Firebug同意typeof(undefined.processId)给出了一个错误,所以我猜不是> _ <。 – Domenic 2009-11-05 16:33:44