javascript变量和对象要注意的点
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变量和对象要注意的点的更多相关文章
- 学习笔记:Javascript 变量 包装对象
学习笔记:Javascript 变量 包装对象 如下代码,可以输出字符的长度. var str = "Tony"; str.length; 这时再试试以下代码,返回是 undefi ...
- javascript变量 数组 对象
一 变量 1.全局变量和局部变量 在JavaScript中同一个变量可以反复赋值,而且可以是不同类型的变量,但是要注意只能用var声明一次.这种变量类型不固定的语言称为动态语言,与之对应的静态语言,如 ...
- javascript判断一个变量或对象是否存在
判断一个变量或对象是否存在,是一种常用的操作.我这里收集了几种. //1. 最常用的一种方法.if(typeof v == 'undefined'){ console.log("v is u ...
- javascript变量的作用域
javascript变量的作用域 基本类型和引用类型 基本类型值指的是简单的数据段,而引用类型值指的是那个可能由多个值组成的对象 讲一个值赋值给变量时,javascript解析器首先要确定是基本类型 ...
- javascript是判断对象是否是数组
JS中的数据类型: 2大类 原始类型:值保存在变量本地的数据类型 5种:Number String Boolean undefined null Number:8bytes 舍入误差-->四舍五 ...
- JavaScript 基础回顾——对象
JavaScript是基于对象的解释性语言,全部数据都是对象.在 JavaScript 中并没有 class 的概念,但是可以通过对象和类的模拟来实现面向对象编程. 1.对象 在JavaScript中 ...
- javascript变量声明 及作用域
javascript变量声明提升(hoisting) http://openwares.net/js/javascript_declaration_hoisting.html 可能要FQ一下 java ...
- javascript中的对象,原型,原型链和面向对象
一.javascript中的属性.方法 1.首先,关于javascript中的函数/“方法”,说明两点: 1)如果访问的对象属性是一个函数,有些开发者容易认为该函数属于这个对象,因此把“属性访问”叫做 ...
- JavaScript 中的对象
JavaScript 中的对象 在 JavaScript 中,对象是数据(变量),拥有属性和方法. JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 访问对象的属性 访 ...
随机推荐
- ArcGIS Engine 图层裁剪 Clip的实现方法
方法一, 图层对图层裁剪,输出图层 ILayer pLayer; IFeatureLayer pFeatureLayer; IFeatureClass pFeatureClass; IWorkspac ...
- @Valid springMVC bean校验不起作用
@RequestMapping("/add2") public String addStudentValid(@Valid @ModelAttribute("s" ...
- HashCode equals
HashCode: hashcode就是一个签名.当两个对象的hashcode一样时,两个对象就有可能一样.如果不一样的话两个对象就肯定不一样.一般用hashcode来进行比较两个东西是不是一样的,可 ...
- Oracle 10g RAC中的DRM问题及关闭
在RAC环境中,Oracle使用GRD(Global Resource Service)来记录各个RAC节点的资源信息,具体通过GCS(Global Cache Service)和GES(Global ...
- relatedTarget、fromElement、toElement之间的关系
在发生mouseover和mouseout事件时会把鼠标指针从一个元素的边界之内移到另一个元素边界之内.对 mouseover事件而言,事件的target是获得光标的元素,而relatedTarget ...
- HTML控件-Select
从今天开始,编写对于html控件的特性的探索文章,会广泛的引用网络的资源,所以本文的版权属于广大人民群众,欢迎转载,也同样禁止商业应用. [高手勿喷,标签页点击红色叉叉] select控件有一个特性: ...
- Hive参数层面常用优化
1.hive数据仓库权限问题: set hive.warehouse.subdir.inherit.perms=true; 2.HiveServer2的内存 连接的个数越多压力越大,可以加大内存:可以 ...
- MySQL数据库优化技术之数据库表的设计
三范式介绍表的范式:只有符合的第一范式,才能满足第二范式,进一步才能满足第三范式. 1. 第一范式:表的列具有原子性,不可再分解.只要是关系型数据库都自动满足第一范式.数据库的分类:关系型数据库:My ...
- 解决IllegalStateException: Can not perform this action after onSaveInstanceState
今天使用Fragment的时候,出现了这个错误 IllegalStateException: Can not perform this action after onSaveInstanceState ...
- linux 系统启动流程
原著资料网址:http://wenku.baidu.com/view/414127fdf705cc1755270997.html (版权归原作者所有) Linux系统的启动分5个阶段,每个阶段都完成不 ...