变量是不是未定义[重复]
Posted
技术标签:
【中文标题】变量是不是未定义[重复]【英文标题】:Whether a variable is undefined [duplicate]变量是否未定义[重复] 【发布时间】:2010-12-01 22:23:12 【问题描述】:如何查找变量是否未定义?
我目前有:
var page_name = $("#pageToEdit :selected").text();
var table_name = $("#pageToEdit :selected").val();
var optionResult = $("#pageToEditOptions :selected").val();
var string = "?z=z";
if ( page_name != 'undefined' ) string += "&page_name=" + page_name;
if ( table_name != 'undefined' ) string += "&table_name=" + table_name;
if ( optionResult != 'undefined' ) string += "&optionResult=" + optionResult;
【问题讨论】:
undefined 是 javascript 的一个属性,所以不需要用引号引起来。您正在检查这些值是否实际上是字符串“未定义”。 w3schools.com/jsref/jsref_undefined.asp @daddywoodland:小建议;你不应该引用 W3Schools。他们以提供虚假信息而闻名,不是向他人推荐的好资源。 @PaparazzoKid W3Schools 有什么问题?您认为上面的链接不正确还是您有其他示例?我找到了一份有用的参考资料,显然不像翻阅 W3C 文档那样权威,但有时您只需要快速参考即可。 我喜欢在下面使用这个函数,这样我就可以快速轻松地检查变量是否存在。function doesExist(el) if((typeof el !== "undefined") && (typeof el.val() !== "undefined")) return true; else return false;
那你就这样称呼它if (doesExist(variable_name)) // do stuff
【参考方案1】:
jQuery.val() 和 .text() 永远不会为空选择返回“未定义”。它总是返回一个空字符串(即“”)。如果元素不存在,.html() 将返回 null。你需要这样做:
if(page_name != '')
对于不是来自 jQuery.val() 之类的其他变量,您可以这样做:
if(typeof page_name != 'undefined')
您只需要使用typeof
运算符。
【讨论】:
if(undefinedVar) 会抛出错误,但 if(someObj.undefinedProperty) 不会。在后一种情况下,您也可以跳过 typeof 并使用 === undefined(或 !==),不带引号。 我给了你 +1 以正确指出 jQuery 的方法不会返回 undefined。 是的。你对 undefined var 部分是正确的。 typeof 有助于玩自定义变量,无论是否定义都可以 if(typeof page_name != 'undefined') 应该是 if(typeof page_name !== 'undefined')【参考方案2】:if (myVariable === undefined)
或更准确地说
if (typeof myVariable === 'undefined')
注意===
被使用
【讨论】:
请使用typeof(var) === 'undefined'
,因为undefined
在JavaScript 中不是常量。
typeof
不是函数 - 请不要使用括号。
那么这个答案是否有效?被赞成票和 cmets 弄糊涂了
@Roy 你应该去if (typeof var === 'undefined')
@JonnyReeves 我在应用typeof(var)
时收到以下消息:二元操作参数类型字符串与未定义类型不兼容【参考方案3】:
function my_url (base, opt)
var retval = ["" + base];
retval.push( opt.page_name ? "&page_name=" + opt.page_name : "");
retval.push( opt.table_name ? "&table_name=" + opt.table_name : "");
retval.push( opt.optionResult ? "&optionResult=" + opt.optionResult : "");
return retval.join("");
my_url("?z=z", page_name : "pageX" /* no table_name and optionResult */ );
/* Returns:
?z=z&page_name=pageX
*/
这避免了使用typeof whatever === "undefined"
。 (另外,没有任何字符串连接。)
【讨论】:
为什么避免typeof ...
是件好事?【参考方案4】:
http://constc.blogspot.com/2008/07/undeclared-undefined-null-in-javascript.html
取决于您希望测试的具体程度。你也许可以侥幸逃脱
if(page_name) string += "&page_name=" + page_name;
【讨论】:
【参考方案5】:您可以直接检查变量。如果未定义,它将返回 falsy 值。
var string = "?z=z";
if (page_name) string += "&page_name=" + page_name;
if (table_name) string += "&table_name=" + table_name;
if (optionResult) string += "&optionResult=" + optionResult;
【讨论】:
以上是关于变量是不是未定义[重复]的主要内容,如果未能解决你的问题,请参考以下文章