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>

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

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

 javascript构造函数与New表达式

  1. <script>
  2. function Myclass(x,y){
  3. this.x=x;
  4. this.y=y;
  5. }
  6. var obj=new Myclass(1,2);
  7. p(obj.x,obj.y);
  8. </script>

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

1.return 的是一个对象

  1. <script>
  2. var obj={x:3,y:4};
  3. function My(x,y){
  4. this.x=x;
  5. this.y=y;
  6. obj.child=this;
  7. return obj;
  8. }
  9. var obj1=new My(1,2);
  10. p(obj1.x,obj1.child.x);//3,1
  11. //2.return一个基本变量 会忽略这一return 操作
  12. function My(x,y){
  13. this.x=x;
  14. this.y=y;
  15. obj.child=this;
  16. return this.y;
  17. }
  18. var obj1=new My(1,2);
  19. p(obj1.x);//1
  20. </script>
  21. //不建议在构造函数里使用return

javascript变量和对象要注意的点的更多相关文章

  1. 学习笔记:Javascript 变量 包装对象

    学习笔记:Javascript 变量 包装对象 如下代码,可以输出字符的长度. var str = "Tony"; str.length; 这时再试试以下代码,返回是 undefi ...

  2. javascript变量 数组 对象

    一 变量 1.全局变量和局部变量 在JavaScript中同一个变量可以反复赋值,而且可以是不同类型的变量,但是要注意只能用var声明一次.这种变量类型不固定的语言称为动态语言,与之对应的静态语言,如 ...

  3. javascript判断一个变量或对象是否存在

    判断一个变量或对象是否存在,是一种常用的操作.我这里收集了几种. //1. 最常用的一种方法.if(typeof v == 'undefined'){ console.log("v is u ...

  4. javascript变量的作用域

    javascript变量的作用域 基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象  讲一个值赋值给变量时,javascript解析器首先要确定是基本类型 ...

  5. javascript是判断对象是否是数组

    JS中的数据类型: 2大类 原始类型:值保存在变量本地的数据类型 5种:Number String Boolean undefined null Number:8bytes 舍入误差-->四舍五 ...

  6. JavaScript 基础回顾——对象

    JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...

  7. javascript变量声明 及作用域

    javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 java ...

  8. javascript中的对象,原型,原型链和面向对象

    一.javascript中的属性.方法 1.首先,关于javascript中的函数/“方法”,说明两点: 1)如果访问的对象属性是一个函数,有些开发者容易认为该函数属于这个对象,因此把“属性访问”叫做 ...

  9. JavaScript 中的对象

    JavaScript 中的对象 在 JavaScript 中,对象是数据(变量),拥有属性和方法. JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等.   访问对象的属性 访 ...

随机推荐

  1. OpenCV数据结构:CvMat,IplImage,CvArr的应用

    最近看HS算法时,发现在新的OpenCV3.0已经移除了该算法,于是不得不看老版的.这其中涉及到了CvMat,CvArr,IplImage的使用.关于这三个结构与Mat的转换关系,总结如下: (1)派 ...

  2. ArcGIS Engine 图层裁剪 Clip的实现方法

    方法一, 图层对图层裁剪,输出图层 ILayer pLayer; IFeatureLayer pFeatureLayer; IFeatureClass pFeatureClass; IWorkspac ...

  3. 构建高性能可扩展asp.net网站--20130628

    构建高可扩展性最经常讨论到的问题: 如何才能让HTML 显示得更快? 缓存的最佳方式是什么? 如何使用IIS 让网站更快? 如何处理会话状态? 如何改进ASP.NET 代码? 我的数据库为什么这么慢? ...

  4. SparkSQL使用之JDBC代码访问Thrift JDBC Server

    启动ThriftJDBCServer: cd $SPARK_HOME/sbin start-thriftserver.sh & 使用jdbc访问ThriftJDBCServer代码段: pac ...

  5. jmeter随笔(7)--查看请求响应,为空

    问题:查看请求响应,为空 解决办法: 1.在jmeter3.0版本上找到请求,在[Advanced]下勾选"从HTML文件获取所有内含的资源" 2.运行查看,结果如下

  6. POJ1979 Red and Black (简单DFS)

    POJ1979 Description There is a rectangular room, covered with square tiles. Each tile is colored eit ...

  7. 如何制作prezi swf格式字体(prezi 中文字体)

    如何制作prezi swf格式字体(prezi 中文字体) 文/玄魂 前言 Prezi软件虽然没有正式进入中国,但是中国的Prezi爱好者却在不遗余力的推广着Prezi.我接触这款软件比较晚,但是从接 ...

  8. iis 站点部署后 Microsof .Net Framework异常

    最近在部署站点到 iis 中时,遇到 iis 崩溃的问题,一打开部署好 的站点后,就出现 Microsoft .Net Framework 异常的消息提示,具体的 异常情况如下: 于是在网上查找了很多 ...

  9. mac 下安装nginx

    1,mac下的依赖: pcre-8.38.tar.gz nginx-1.4.7.tar.gz 2,解压pcre:进入器解压目录. EddydeMacBook-Pro:~ eddy$ cd /Users ...

  10. PAT1075. PAT Judge

    //终于A了,不难却觉着坑多的的题,注意-1的处理,感觉我是受memset置0的束缚了,可以把初试成绩置-1.就不用debug怎么久,注意对于-1的处理,不然漏洞百出 #include<cstd ...