JavaScript变量引用问题

var a = {n:1};  
var b = a; 
a.x = a = {n:2};  
alert(a.x);// --> undefined  
alert(b.x);// --> {n:2}

为什么a.x会是undefied?一步步来解析:

  1. 首先将a变量的指针指向 {n:1}
  2. 再把b的指针指向a,即{n:1}
  3. 先确定a.x 和a这两个变量的指针,如果没有指针则创建,将a.x创建为null,然后将{n:2}从右到左赋值给他们。
    问题来了——变量a原先指向的是 {n:1},a.x指向了对象的新属性,现在变为了{n:1, x:null}。然后将a重新指向{n:2}{n:1, x:null} 的x的指针指向{n:2}
  4. 于是a就变成了{n:2},并没有属性x,故是undefined。
  5. 而b的指向一直是原本的对象,所以在对象上添加属性,变量b也会显现出来。
在 PHP 和 JavaScript 之间传递变量,需要注意它们的数据类型和作用域。如果变量的作用域或数据类型不一致,可能会出现变量引用问题。 一种常见的解决方法是将 PHP 变量的值作为字符串传递给 JavaScript,并在 JavaScript 中解析为对应的数据类型。例如,可以使用 JSON 格式将 PHP 数组或对象转换为字符串,然后在 JavaScript 中使用 JSON.parse() 方法将其解析为 JavaScript 对象或数组。 以下是一个示例: 在 PHP 中定义一个数组并将其转换为 JSON 字符串: ``` <?php $my_array = array('foo' => 'bar', 'baz' => 'qux'); $my_json = json_encode($my_array); ?> ``` 在 HTML 中引入一个 JavaScript 文件并使用 JSON.parse() 方法解析 JSON 字符串: ``` <html> <head> <script type="text/javascript" src="my_script.js"></script> </head> <body> ... <script> var my_json = '<?php echo $my_json; ?>'; var my_obj = JSON.parse(my_json); alert(my_obj['foo']); // 输出 'bar' </script> </body> </html> ``` 在 JavaScript 中定义一个对象并将其转换为 JSON 字符串: ``` var my_obj = {foo: 'bar', baz: 'qux'}; var my_json = JSON.stringify(my_obj); ``` 在 PHP 中解析 JSON 字符串并将其转换为数组: ``` <?php $my_json = '{"foo":"bar","baz":"qux"}'; $my_array = json_decode($my_json, true); ?> ``` 在 PHP 中解析 JSON 字符串并将其转换为对象: ``` <?php $my_json = '{"foo":"bar","baz":"qux"}'; $my_obj = json_decode($my_json); ?> ``` 这样就可以在 PHP 和 JavaScript 之间传递变量,并解决变量引用问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值