javascript变量的不同行为
Different behavior of javascript variables
本文关键字:变量 javascript 更新时间:2023-11-28
我检查了javascript中未定义/未声明变量的不同行为。例如:
var obj = {};
console.log(x);//Error
console.debug(obj.x) ;//undefined
我的问题是,虽然c和obj.x都没有声明或定义,但为什么我会得到diff行为?我是不是错过了什么?我应该如何跟踪哪个变量已经存在或不存在?
您不能引用未声明的变量而不将其作为错误,除非您在非严格模式下对其进行赋值,否则它将成为隐式全局变量。不过在严格模式下仍然存在错误。
尝试访问对象属性与尝试访问变量不同,尽管您可以从window
:访问全局变量
x; //referenceerror
window.x; //undefined, no reference error
在这种情况下,您需要使用
window.x
与x
,例如:
var x = 5;
(function(){
var x = 3;
x === 3; //We cannot access the 5
window.x === 5 //Only window.x will do it here
})()
这是javascript中的预期行为。若您正在访问一个未声明的变量(x),则会发生错误,因为引擎不知道您要访问什么。
另一方面,物体具有某种双重性质。它同时充当对象和数组,javascript允许您尝试访问数组的成员,即使给定键下的成员不存在。如果指定值下没有键,您将返回undefined
。即,以下两行是等效
console.log(obj.x);
和
console.log(obj["x"]);
只有当您尝试访问不存在的变量的成员时,才会出现错误。例如
console.log(obj.x.x);
如果你试图访问一个未定义的变量,你会得到一个错误,这通常是一件好事,因为它可以让你更容易地发现错误。
如果你想知道一个变量是否被定义,你可以这样检查它的类型:
console.info(typeof x === "undefined" ? "<undefined!>" : x);
在obj.x
的情况下,x
是一个属性,而不是一个变量,并且由于JavaScript对象的动态特性,您总是可以查找属性。
相关文章:
- 调用类向后变量 (JavaScript)
- 初始化父类中的变量(JavaScript/CoffeeScript 习语)
- 可以'找不到变量javascript错误
- 输出数组变量javascript
- 自提交表单访问变量javascript
- 将变量 javascript 添加到用于旋转图像的链接中
- 在文本字段中显示保存的本地存储变量 - javascript
- 将变量添加到变量 JavaScript 中
- 获取要在变量 JavaScript 中使用的用户输入值
- 如何在变量 Javascript 中删除双引号
- 使用变量 javascript 从 json 文件中获取数据
- 读取输入和打印变量 - JavaScript 和 HTML 4.01
- 传递 PHP 变量 JavaScript 窗口位置
- 重置变量 JavaScript
- 变量 JavaScript 中的变量
- 尝试使用多个函数时无法使用全局变量 - JavaScript - 初学者
- 如何按值将数组分配给另一个变量 JavaScript
- setTimout 搞砸了变量 JavaScript
- 用内部函数变量更改外部函数变量?Javascript
- 根据变量 JavaScript 增加