ECMAScript 变量可能包含两种不同数据类型的值:基本类型值和引用类型值。

基本类型和引用类型的值

基本类型值(String,Number,Boolean,Null,Undefined)指的是简单的数据段;引用类型值(保存在内存中的对象)指的是那些可能由多个值构成的对象。5种基本类型值的讨论见 JavaScript数据类型的一些注意要点
值得注意的是,很多语言中,字符串以对象的形式来表示。但在ECMAScript 中则放弃了这一点。

动态的属性

动态的属性:动态地为引用类型值添加属性。对于引用类型的值,可以为其添加、改变和删除属性和方法。如:

var persons = new Object();
persons.name = "Oliver";
document.write(persons.name); //"Oliver"

在上面这个例子中,变量persons 储存了一个对象。persons 就是变量,name 就是属性,“Oliver”就是赋值给persons.name 的普通字符串。最后又通过document.write 访问了这个name 属性。如果对象不被销毁或者这个属性不被删除,则这个属性将一直存在。

但是,我们不能给基本类型的值添加属性,尽管这样做不会导致任何错误。如:

var name = "Oliver";
name.age = 18;
document.write(name.age); //undefined

所以说,只能用引用类型值动态地添加属性。

复制变量值

复制变量值:从一个变量向另一个变量复制基本类型值和引用类型值。

复制基本类型值

非常简单,如:

var x = 1;
var y = x;
document.write(y); //1

supereasy 在这里,复制之后,x 和y 完全独立,互不影响。

复制引用类型值

当从一个变量向另一个变量复制引用类型的值时。与基本类型值不同的是,这个值的副本实际上是一个指针,而这个指针指向存储在堆中的一个对象。如:

var persons = new Object();
persons.name = "Oliver";
var child = persons;
document.write(child.name); //"Oliver"

复制操作结束后,两个变量实际上将引用同一个对象。改变其中一个变量,就会影响另一个变量。

传递参数

传递参数:函数外部的值复制给函数内部的参数。实际上,就跟把值从一个变量复制到另一个变量一样。该怎么操作怎么操作。

向参数传递基本类型的值(参数是按值传递的,复制给局部变量)

向参数传递基本类型的值时,被传递的值会被复制给一个局部变量。如:

function add(x){x = x + 10;return x;
}
var num = 1;
document.write(num); //1
var result = add(num);
document.write(result); //11

很明显可以看到,x 实际上是函数的局部变量。调用这个变量时,num 作为参数被传递给函数,这个变量的值是1。在函数内部,x 被加上了10 但这病不影响外部的num。

简单的说就是,num 复制给参数x,x 在函数内部是局部变量,无论x 怎么变化,都不影响num 的变化。*

向参数传递引用类型的值(参数是按值传递的,传递地址)

向参数传递引用类型的值时,会把这个值在内存中的地址复制给一个局部变量,因此在这个局部变量的变化会反映在函数的外部。如:

function set(obj){obj.name = "Oliver";
}
var persons = new Object();
set(persons);
document.write(persons.name); //"Oliver"

但是

但是

但是

一定要注意的是参数不!是!按!引!用!传!递!的!

看下面这个例子:


function set(obj){obj.name = "Oliver";obj = new Object();obj.name = "Troy"document.write(obj.name); //"Troy"
}
var persons = new Object();
set(persons);
document.write(persons.name); //"Oliver"

上面这个说明了当函数内部重写obj 时,这个变量引用的就是一个局部对象了。而这个局部对象会在函数执行完毕后立即被销毁!!这也是为什么函数内部返回了obj.name 的值是"Troy";函数外部返回了obj.name 的值则是"Oliver"的原因了。

所以说,虽然局部作用域中修改的对象会在全局作用域中反映出来,但仍然不能说明参数是按引用传递的。

所以还是那句话,一定要注意

参数不!是!按!引!用!传!递!的!

检测类型

毋庸置疑,检测基本数据类型时,最佳的工具是typeof操作符。如:

var a = "abc";
var b = true;
var c = 21;
var d = null;
var e;
var f = new Object();
document.write(typeof a + "<br/>"); //string
document.write(typeof b + "<br/>"); //boolean
document.write(typeof c + "<br/>"); //number
document.write(typeof d + "<br/>"); //object
document.write(typeof e + "<br/>"); //undefined
document.write(typeof f + "<br/>"); //object

而检测引用类型的值时,最佳的工具是instanceof操作符。如:

var array = new Array;
document.write(array instanceof Array); //true;
var obj = new Object();
document.write(obj instanceof Array); //false;
document.write(obj instanceof Object); //true;

语法是:


result = variable instanceof constructor

所有引用类型的值都是Object 的实例。因此在检测一个引用类型值和Object 构造的函数时,instanceof 操作符始终会返回true。

Javascript变量的注意要点相关推荐

  1. JavaScript 变量

    变量是存储信息的容器. 实例 var x=2; var y=3; var z=x+y; 亲自试一试 就像代数那样 x=2 y=3 z=x+y 在代数中,我们使用字母(比如 x)来保存值(比如 2). ...

  2. javascript变量声明 及作用域

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

  3. 使用JavaScript变量需要注意哪些语法细节?

    使用JavaScript变量需要注意哪些语法细节?JavaScript在很多地方经常会涉及到,尤其是JavaScript变量这方面,在使用变量时,还有一些值得注意的语法细节,下面进行详细讲解. 使用J ...

  4. javascript 变量监听器

    javascript 变量监听器 <!DOCdata html> <html lang="en"> <head><meta charset ...

  5. js html保存json,如何在json文件中存储jQuery或javascript变量?

    我可以知道有没有机会将jquery变量保存在json文件中?提前致谢.如何在json文件中存储jQuery或javascript变量? 我: var image='/test/test.png'; 我 ...

  6. Javascript变量函数浅谈

    一.变量 在javascript变量中可以存放两种类型的值:原始值和引用值. 原始值存储在栈上的简单字段,也就是值直接存储在变量所标示的位置内. 引用值存储在堆内的对象,栈内变量保存的是指向堆内对象的 ...

  7. Javascript 变量、函数的声明

    javascript变量 全局变量和局部变量     按照变量的作用域来区分,和大多数编程语言类似,javascript变量也分为全局变量和局部变量.全局变量的作用域是整个js文件,而局部变量的作用域 ...

  8. C#与Javascript变量、函数之间的相互调用2008年11月28日 星期五 05:28 P.M.1.如何在JavaScript访问C#函数?

    C#与Javascript变量.函数之间的相互调用 2008年11月28日 星期五 05:28 P.M. 1.如何在JavaScript访问C#函数? 2.如何在JavaScript访问C#变量? 3 ...

  9. JavaScript 变量的生存期

    JavaScript 变量的生存期 JavaScript 变量的生命期从它们被声明的时间开始. 局部变量会在函数运行以后被删除. 全局变量会在页面关闭后被删除.

最新文章

  1. Python学习全家桶,Python初学者十一个热门问题
  2. .Net 2.0 事件机制,更简化了...
  3. 免费机器学习课程爆红:从概率与统计到全栈深度学习,英伟达工程师小姐姐整理...
  4. 热成像成像不清楚是什么时候_「从零搞机」热成像仪查看 分形工艺Node 202 机箱 风道散热情况...
  5. u-boot环境变量设置
  6. 项目管理过程组和知识领域 简介重点记忆
  7. 95-110-040-源码-Env-StreamTableEnvironment
  8. 【Git】git 如何合并两个仓库(拉取A仓库的分支到B仓库)
  9. eclipsevue代码怎么运行_打了多年的单片机调试断点到底应该怎么设置? | 颠覆认知...
  10. Golang slice高级应用
  11. java 类文件_Java类文件概述
  12. 某听书网站系统漏洞,利用抓包拼接方式获取网站资源
  13. 归并排序 java_Java实现归并排序
  14. kuangbin线段树专题
  15. 博客营销推广方案 方法
  16. js实现简单的有序map
  17. 2021高考成绩查询大连,2021大连市地区高考成绩排名查询,大连市高考各高中成绩喜报榜单...
  18. 20220727使用汇承科技的蓝牙模块HC-05配对手机进行蓝牙串口的演示
  19. Windows 一键息屏程序ScreenOff下载及说明
  20. mysql sql 备份表_SQL语句之备份表

热门文章

  1. Spring Cloud Feign 熔断机制填坑
  2. Linux学习笔记(十二)usermod、passwd、mkpasswd
  3. 19. 删除链表的倒数第N个节点
  4. tweak 项目 快速搭建CocoaAsyncSocket(建连、断开、重连、心跳、通用请求)
  5. 企业信息化快速开发平台JeeSite
  6. 给表增加字段 本地测试正常 上传到服务器不正常
  7. 存储过程--分页与C#代码调用
  8. Javascript 数字时钟
  9. 冒号课堂§2.4:并发范式
  10. PYTHON1.day01