JavaScript中undefined和is not defined异常

本文探讨了JavaScript中变量声明的不同方式及其对作用域的影响,包括未声明变量的行为及如何避免潜在错误。

不解释,直接上代码:

console.log(xx);
console.log(window.xx);

(其中xx是一个不存在的变量)

当直接打印xx变量时,直接抛出一个is not defined异常并终止执行。

然而将xx变量以window.xx的形式打印出来时,缺直接输出一个undefined,并没有出现异常,可以继续执行。


查阅相关文档之后才知道,打印undefined说明该变量已经声明,但没有赋值;打印is not defined异常说明该变量连声明都没有。通过这条结论说明,window.xx的形式会在window对象中隐式的声明该变量。

这也说明了,为什么以下代码可以直接运行了。

window.xx = 2;
console.log(window.xx);

另外有个一个相关的问题,见代码:

function t1() {
	console.log(str2);  //undefined
	var str2 = 'mike';
}
t1();

function t1() {
	console.log(str2);  //is not defined
	str2 = 'mike';
}
t1();

第一种情况涉及到JavaScript的运行阶段,分为词法分析阶段和运行阶段,在词法分析阶段时,先声明了str2变量但没有赋值,所以在运行阶段就出现了undefined。

第二种情况在词法分析阶段也无法声明str2,因为没有var关键字声明,所以在运行阶段直接抛出异常。


还有一点需要注意的是,凡是没有使用var声明的变量,最终都会成为全局对象window的属性,如下代码:

function t1() {
	a = 10
	console.log(a);//10
	console.log(window.a);//10
}
t1();



在编程错误提示里,尤其是JavaScript中,undefinednot defined有明显区别。 undefinedJavaScript语言中定义的五个原始类中的一个,是程序允许的一个值,它是一个只有一个值的数据类型,值就是undefined。当使用var声明变量但未赋值时,这个变量的值就是undefined。例如`var temp; alert(temp);` ,这里弹出的就是值undefined。同时,使用`typeof`去检测未赋值的变量或未定义属性时,也会返回字符串`"undefined"`,比如`alert(typeof temp);`会弹出字符串`"undefined"` ,代表的是undefined这个类名。并且,使用`==`判断声明但未赋值的变量`undefined`时会返回`true`,如`alert(temp==undefined);`会弹出`true` [^1][^2]。 not defined则是JavaScript在运行代码时,遇到没有定义就用来运算的变量时爆出的错误。虽然在许多JavaScript教程中提到变量即使不定义也可以直接拿来赋值,但不能用于运算。例如`temp3 = temp4+1; alert(temp3);` ,这里使用了没有定义的`temp4`来运算,就会报错,不同浏览器可能说法不同,常见的是提示`temp4 is not defined`。像`alert(temp2==undefined);` 中使用了未定义的`temp2`进行运算,也会报错`temp2 is not defined` [^2]。 ```javascript // 示例代码 var declaredButUnassigned; console.log(declaredButUnassigned); // 输出: undefined console.log(typeof declaredButUnassigned); // 输出: undefined // 未定义变量用于赋值 undeclaredVariable = 10; console.log(undeclaredVariable); // 输出: 10 // 未定义变量用于运算 // 下面这行代码会报错:ReferenceError: nonExistentVar is not defined // var result = nonExistentVar + 5; ```
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

shadon178

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值