扫码关注官方订阅号
var a = {
x : 3, y : 9, z : a.y + 1;
}alert( a.z );
错误提示: cannot read property of "y" of undefined;为什么?
欢迎选择我的课程,让我们一起见证您的进步~~
var a = { x:3, y:9, z:a.y + 1 };
表达式赋值先计算赋值操作符右边的值,然后把右边的计算结果赋值给左边的变量左边的变量在没有被赋值前,其值为undefined所以在{}对象字面量表达式执行完之前,a的值一直为undefined故JS解释器会提示如上的错误信息给你
{}
那么修改为
var a = { x:3, y:9, z:this.y + 1 };
代码运行没有错误,那么a.z是期望的10么?
console.log(a.z);
很不幸,给出的值是NaN,原因在于此处的this代表的是全局对象,而不是期望的变量a指向的对象,全局对象下没有y这个属性,this.y值为undefiend,和1执行加操作后,其值就为NaN
NaN
想要在字面量表达式中使用当前构建的对象的属性值是不能达成的
不过可以试试这样的~
var a=new function(){ this.x=3; this.y=9; this.z=this.y+1; };
var a={}; 这种方式是对象常量,对象的属性会立即计算执行,在堆中开辟一个内存存放,然后a这个变量指向这个内存。这就是你在a属性中引用别的属性报错的原因,因为a这时还是undefined。有人建议使用在a属性中使用this,是希望this指向的是a,但实际不是,应该是window或global。解决方式 分开计算 a.c=a.b+4 改为函数 a.c= function(){return this.b+4}
a.y + 1是在变量a声明过程中用到的计算表达式,但既然说了,这个时候a还在声明阶段,那当然是undefined了,换成this.y + 1吧
a.y + 1
a
undefined
this.y + 1
原因楼上已经说了,换成this.a.y + 1
this.a.y + 1
一定要这么写可以考虑用闭包
微信扫码关注PHP中文网服务号
QQ扫码加入技术交流群
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
PHP学习
技术支持
返回顶部
表达式赋值先计算赋值操作符右边的值,然后把右边的计算结果赋值给左边的变量
左边的变量在没有被赋值前,其值为undefined
所以在
{}对象字面量表达式执行完之前,a的值一直为undefined故JS解释器会提示如上的错误信息给你
那么修改为
代码运行没有错误,那么a.z是期望的10么?
很不幸,给出的值是
NaN,原因在于此处的this代表的是全局对象,而不是期望的变量a指向的对象,全局对象下没有y这个属性,this.y值为undefiend,和1执行加操作后,其值就为NaN想要在字面量表达式中使用当前构建的对象的属性值是不能达成的
不过可以试试这样的~
var a={}; 这种方式是对象常量,对象的属性会立即计算执行,在堆中开辟一个内存存放,然后a这个变量指向这个内存。这就是你在a属性中引用别的属性报错的原因,因为a这时还是undefined。有人建议使用在a属性中使用this,是希望this指向的是a,但实际不是,应该是window或global。
解决方式 分开计算 a.c=a.b+4
改为函数 a.c= function(){return this.b+4}
a.y + 1是在变量a声明过程中用到的计算表达式,但既然说了,这个时候a还在声明阶段,那当然是undefined了,换成this.y + 1吧原因楼上已经说了,
换成
this.a.y + 1一定要这么写可以考虑用闭包