javascript变量和对象要注意的点

js对象和变量,对象本身是没有名称的,之所以使用变量是为了通过某个名称来称呼这样一种不具名称的对象。
变量分基本变量和引用类型变量。
将基本类型的的值付给变量的话,变量将这个值本身保存起来。

 1 <script type="text/javascript">
 2 function p(){
 3     var len=arguments.length;
 4     for(var i=0;i<len;i++){
 5         document.write(arguments[i]+"<br/>");
 6     }
 7 }
 8 var a=123;
 9 var b=a;  //b把123保存起来,之后b与a没有关系了,操作b不影响a了
10 b++;
11 p(a,b);//123,124
12 //将一个对象赋值给一个变量,其实是把对象的引用赋值给了变量,对象本身是无法赋值给一个变量的
13 var a={x:1,y:2}; //a里存的是对象的引用
14 b=a;  //b里存的是变量的引用 或者说地址,而不是变量本身,这时a,b里存的是同一个引用地址,b的操作影响对象
15 b.x++;
16 p(a.x,b.x);//2,2
17 //再比如
18 var a={x:1,y:2};
19 var b=a;
20 var a={x:2,y:3};
21 p(b.x);//1
22 </script> 
23 //对于交换变量值得函数,可以用javascript1.7里 增强功能
24 <script type="application/javascript;version=1.7">
25 function swap(a,b){
26     return [b,a];
27 }
28 var x=4,y=3;
29 [x,y]=swap[y,x];
30 p(x,y)//3,4
31 </script>
 1 //变量的查找
 2 //试图读取没有声明的变量,会引起referenceError异常
 3  <script>
 4  var a=a||7; //利用对已经声明的变量再次声明不会产生副作用的特性
 5  //也可以
 6  if(typeof a!=='undefined'){
 7      var b=a;
 8  }else{
 9      var b=7;
10  }
11  //判断a是否声明(不管赋值与否)
12  if('a' in this){
13      var b=a;
14  }else{
15      b=7;
16 }
17 //然后可以放心用b了
18  </script>

变量和属性的实质上是一样的,不过如果变量和属性本身不存在,在处理方式上有所不同

<script>
 p(x);//ReferenceError x is not undefined
 p(this.x);// undefined    访问不存在的属性并不会引起错误 
var obj={};
p(obj.x);//undefined
p(obj.x.y) //typeError 
//一般使用
obj.x&&obj.x.y
 </script>
// js不支持函数默认参数在调用函数时不检查实参和形参个数,不一致也不报//任何错误
 //可以模拟默认参数
 <script>
 function a(pos){
     pos=pos||{x:1,y:2};
     return pos.x+pos.y;

 }
 </script>

 javascript构造函数与New表达式

<script>
 function Myclass(x,y){
     this.x=x;
     this.y=y;
 }
 var obj=new Myclass(1,2);
 p(obj.x,obj.y);
 </script>

1.声明和普通函数相同
2.通过new 表达式调用
3.调用构造函数的new 表达式的值是(被新生成对象)对象的引用
4.通过new 表达式调用的构造函数内的this引用 引用了(被新生成的)对象。
构造函数会隐式执行 return this操作
如果在构造函数里显式地写有renturn 语句会分成2种情况

1.return 的是一个对象

<script>
 var obj={x:3,y:4};
function My(x,y){
    this.x=x;
    this.y=y;
    obj.child=this;
    return obj;
}
var obj1=new My(1,2);
p(obj1.x,obj1.child.x);//3,1
//2.return一个基本变量   会忽略这一return 操作
function My(x,y){
    this.x=x;
    this.y=y;
    obj.child=this;
    return this.y;
}
var obj1=new My(1,2);
p(obj1.x);//1
 </script>
 //不建议在构造函数里使用return 

 

转载于:https://www.cnblogs.com/HKUI/p/4083550.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值