变量是不是未定义[重复]

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; 

【讨论】:

以上是关于变量是不是未定义[重复]的主要内容,如果未能解决你的问题,请参考以下文章

如何确定变量是不是未定义[重复]

无法连接到本地 PHP 站点(未定义索引和未定义变量错误)[重复]

无论我做啥,变量都是未定义的[重复]

未定义变量时计算css高度[重复]

PHP包含文件中的未定义变量错误[重复]

使用jquery发布变量时如何修复“未定义索引”[重复]