我想obj1用属性构建一个对象obj2,这是另一个对象.为了避免重新声明obj1和obj2,我使用下面的代码:
if (!obj1) obj1 = {};
if (!obj1.obj2) obj1.obj2 = {};
// code to use obj1
Run Code Online (Sandbox Code Playgroud)
假设,obj1并且obj1.obj2尚未定义,代码使浏览器报告错误"obj1未定义".
如果我将代码更改为:
if (typeof obj1==='undefined') obj1 = {};
if (!obj1.obj2) obj1.obj2 = {};
// code to use obj1
Run Code Online (Sandbox Code Playgroud)
然后没有错误,而我认为它应该报告"obj2未定义".我很困惑为什么JavaScript会对参考和属性的短手错误检查进行不同的处理.任何人都可以对此有所了解吗?
如果你愿意:
if (!window.obj1) window.obj1 = {};
if (!obj1.obj2) obj1.obj2 = {};
Run Code Online (Sandbox Code Playgroud)
您会发现代码按预期工作.
obj1当你检查它是否存在时,它甚至不是一个参考; 没什么.它不存在,因为你没有声明它(你没有初始化它).
var obj1;
if (!obj1) obj1 = {};
if (!obj1.obj2) obj1.obj2 = {};
Run Code Online (Sandbox Code Playgroud)
这也有效,因为你已经宣布存在obj1; 你还没有初始化它.
未设置的对象的所有属性都保存该值undefined; 这就是为什么它会响应你的空手!obj1.obj2
var obj1 = {};
obj1.a === undefined // true;
Run Code Online (Sandbox Code Playgroud)
但是,必须先定义变量,然后才能访问它们.
| 归档时间: |
|
| 查看次数: |
223 次 |
| 最近记录: |