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

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

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. Delphi 连接mysql 的功能, 去除乱码, 需要设置字符集

    vDataBaseName := aConfiginiFile.ReadString('DataBaseConfig', 'DataBase', CH_IPC712Db); vServer := aC ...

  2. [SQL]SQL Server数据表的基础知识与增查删改

    SQL Server数据表的基础知识与增查删改 由张晨辉(学生) 于19天 前发表 | 阅读94次 一.常用数据类型 .整型:bigint.int.smallint.tinyint .小数:decim ...

  3. (medium)LeetCode 224.Basic Calculator

    Implement a basic calculator to evaluate a simple expression string. The expression string may conta ...

  4. Library Cache: Lock, Pin and Load Lock

    What is "Library cache lock" ? This event controls the concurrency between clients of the ...

  5. win7设置防火墙允许Ping与telnet

    Ping: 打开控制面板 >> 系统安全 >> windows防火墙 >> 高级设置 >> 入站规则

  6. net start mysql服务名无效

    解决方案:(参考以下命令) 1.win+R键输入cmd敲回车进入dos界面: 2.输入cd d:/mysql-5.5.25/bin敲回车,发现没变化: 3.输入d:敲回车,定位到d:\mysql-5. ...

  7. Android——Gallery 图片拖动效果

    1.XML文件 <?xml version="1.0" encoding="utf-8"?><Gallery xmlns:android=&q ...

  8. MySQL数据库优化技术之SQL语句慢查询定位

    通过show status命令了解各种SQL的执行频率 MySQL客户端连接成功后,通过使用show [session|global] status 命令可以提供服务器状态信息: 其中的session ...

  9. jdk集合常用方法分析之ArrayList&LinkedList&以及两者的对比分析

    集合使用注意事项: 1.集合当中只能放置对象的引用,无法放置原生数据类型,我们需要使用原生数据类型的包装类才能加入到集合当中去(JDK5之后会进行自动的装箱和拆箱操作,表面上看集合中是可以直接放置原生 ...

  10. C# Windows Forms 事件处理顺序

    事件引发的顺序对某些Windows 窗体应用来说十分重要.当某些事件需要特别处理时(如重绘窗体的某些部分),必须知道事件在运行时的确切引发顺序.下面就应用程序和控件的生命周期中的几个重要阶段的事件顺序 ...