关于javascript的typeof obj === "undefined"

erictang2003 2013-01-22 11:02:57
这样写 alert( typeof obj === "undefined" );
没有问题,弹出提示,结果是 true

-----------------------------------------------------------
但是换个方式

test(obj);

function test(p){
alert( typeof p === "undefined" );
}

结果是抛出异常 obj is undefined

-----------------------------------------------------------

谁能解释下原因?
...全文
380 6 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
BorisHuai 2013-01-22
  • 打赏
  • 举报
回复 1
typeof基本上是唯一一个可以对未声明的编辑进行操作的运算符,另外可以对未声明的变量进行赋值,但会自动声明为全局变量,其余的时候都不可以直接使用未声明变量的。你的第一种写法是正确的,因为typeof可以对未声明变量进行操作,而你的第二种用法把一个未声明的变量作为参数使用,所以就抛异常了。
爱若如梦 2013-01-22
  • 打赏
  • 举报
回复
传参的时候会检查参数。
KK3K2005 2013-01-22
  • 打赏
  • 举报
回复
xxx(??); 这里??能随便写吗? 关键点再这里 不再 typeof
bbjbepzz 2013-01-22
  • 打赏
  • 举报
回复
你调用test(obj)的时候,把obj赋值给p,obj没有值,所以会报obj is not defined。 就好像 a = 10 ; a = b ;//这里会报b is not defined 你可以直接调用test()不传参数,看一下结果是不是和你想要的。
oxfed 2013-01-22
  • 打赏
  • 举报
回复
这个问题只能说明typeof的强大,并没有体现有冲突存在,因为typeof本身就不是方法而是运算符
色拉油 2013-01-22
  • 打赏
  • 举报
回复
引用 1 楼 bbjbepzz 的回复:
你调用test(obj)的时候,把obj赋值给p,obj没有值,所以会报obj is not defined。 就好像 a = 10 ; a = b ;//这里会报b is not defined 你可以直接调用test()不传参数,看一下结果是不是和你想要的。
一楼正解,函数调用过程

87,997

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧