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 中的所有事物都是对象:字符串.数字.数组.日期,等等. 访问对象的属性 访 ...
随机推荐
- js 未结束的字符串常量错误解决方法
1.JAVASCRIPT引用时,使用的字符语言不一致. 比如:<script type=”text/javascript” src=”xxx.js” charset=”UTF-8″>.xx ...
- VS2015+win10+opencv3.0整个安装过程
LZ最近换了台新台式电脑,开始下载新VS软件,话说软件平台越新越好用,一看网上已经有VS2015版本,果断就去官网下载. 1.安装VS操作 官方网的链接如下:https://www.visualstu ...
- 怎样用CODESOFT打印连续的条码标签?
在实际工作中,经常会用CODESOFT条 码打印软件来实现打印连续的条码标签,将这些标签按递增或递减等方式连续打印.这样设置可大大提高用户的工作效率.实现在CODESOFT 2015打印连续条码标签, ...
- SVN+FTP服务器搭建(一)——SVN安装配置篇
Subversion是一个自由,开源的版本控制系统.在Subversion管理下,文件和目录可以超越时空.Subversion将文件存放在中心版本库里.这个版本库很像一个普通的文件服务器,不同的是,它 ...
- [转]Markdown 语法手册
Markdown 是一种轻量级标记语言,能将文本换成有效的XHTML(或者HTML)文档,它的目标是实现易读易写,成为一种适用于网络的书写语言. Markdown 语法简洁明了,易于掌握,所以用它来写 ...
- Change screensaver through registry
If you wanna change the screensaver, you can update registry as follows{autoit script}: RegWrite(&qu ...
- 【PL/SQL练习】命名块: 存储过程、函数、触发器、包
创建时定义名称 2.可以被Oracle server 保存 3.可以被任何程序调用 4.可以被共享 存储过程: 1.不带参数的存储过程: SQL> create or replace proce ...
- linux查看内存和回收内存
清理前内存使用情况 free -m free -g echo 1 > /proc/sys/vm/drop_caches 清理后内存使用情况 free -m
- 写给自己的Java程序员学习路线图
恩,做开发的工作已经三年多了,说起来实在是惭愧,自己的知识树还像一棵小草一样,工作中使用到了许多的知识和技术,不过系统性不够.根基不牢.并且不够深入!当然,慢慢的我也更加的清楚,我需要学习一些什么样的 ...
- 洛谷P2732 商店购物 Shopping Offers
P2732 商店购物 Shopping Offers 23通过 41提交 题目提供者该用户不存在 标签USACO 难度提高+/省选- 提交 讨论 题解 最新讨论 暂时没有讨论 题目背景 在商店中, ...