如标题所问,常见有的js代码中有如下写法:
if(arg){}
通过以上语句来判断变量是否存在,按理说if后应跟着一个boolean的表达式,但arg如果不存在则是undefined,存在则为变量本身存储的值,通过所示的语句如何能准确的判断一个变量是否已定义,该怎么理解呢?
望各位能指点迷津~~~
[b]问题补充:[/b]
我知道使用undefined和null来判断一个变量是否定义或为空~~
但直接把变量放到if的后面,而if需要一个boolean值,
那么使用if(arg)来判断一个变量是否定义,根据是什么呢?
[quote]这种写法不保险 如果arg是false 会引发一些错误。使用 typeof(arg) == "undefined" 可以避免错误的产生 区分出 false的现象[/quote]
你测试过么?不要从网上摘一段就来回答人家问题。
javascript中null,undefined,0,"",false作为if的条件的时候,被认为是flase.
[quote]按理说if后应跟着一个boolean的表达式[/quote]不要用java的思维来思考javascript,if后面跟不跟boolean表达式,是由语言规范定的,java说,if后面必须是boolean表达式,那你就必须要用一个boolean表达式,javascript说,if后面只要是null,undefined,0,"",false,就是false,那就是这样的,语言的specification而已
通过if(age==undefined||age=='')来判断一个对象或一个变量没有被赋值或是否存在。一般情况下,为了系统的安全性,在可能有问题的出现的地方加上该判断语句如:判断一个节点是否有父节点,并得到父节点的信息等等操作
一般式通过如下方式得到表单输入域:
var userId = document.getElementById("userId");
如果有id="userId"的输入域,则对象userId就存在。没有的话,userId就是null或者undefined。
你只要判断 (userId == null || userId == undefined)是否为true就可以验证userId
有没有定义了。
在js做比较的时候,有这样的三条规则:
如果比较的两者中有bool,会把 bool 先转换为对应的 number,即 0 和 1
如果比较的双方中有一方为number一方为string,会把string转换为数字
把string直接转换为bool的时候,空字符串‘’转换为 false,除此外的一切字符串转换为 true
if的条件只要有真假之分就可以,例如一个整数可以作为条件,永远为真;依此类推字符也是一个常量可以做条件。
这种写法不保险 如果arg是false 会引发一些错误。使用 typeof(arg) == "undefined" 可以避免错误的产生 区分出 false的现象