详解JavaScript 的变量


Posted in Javascript onMarch 08, 2019

基本类型和引用类型的值
ECMAScript变量一般有两种数据类型的值:基本类型和引用类型。

  • 基本类型: 简单的数据段:Undefined, Null, Boolean, Number, String
  • 引用类型:多个值构成的对象;

1. 动态的属性

定义两者的值:创建一个变量并为其变量赋值;

执行两者的值:

  • 引用类型:可以添加、删除属性和方法;
  • 基本类型:不能添加、删除属性和方法;

比如:引用类型 a,可以添加属性 name age

var a = new Object();
a.name = "杨子龙";
a.age = 24;
console.log(a.name);      //杨子龙

基本类型 name 无法添加属性 age

var name = "杨子龙";
name.age = 24;
console.log(name.age);     //undefined

代码中可知:只能给引用类型值动态地添加属性,以便将来使用。

2. 赋值变量值

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

基本类型:在变量对象上创建一个新值,并将其值复制给新变量分配的位置上;(完全独立的两个变量)

例如

var a = 111;
 var b = a;
 console.log(b);     //111

代码中可知:变量b的值只是变量a的值的一个副本,两者的值111是完全独立的。

引用类型:将存储在变量对象中的值复制一份放到为新变量分配的空间中;(引用同一个对象的两个变量)

引用类型的值的副本实际是一个指针,指向存储在堆中的一个对象。

var obj1 = new Object;
var obj2 = obj1;
obj1.name = "杨子龙";
console.log(obj2,name);     // Object { name="杨子龙"} 杨子龙

代码中可知:obj1和obj2都指向同一个对象Object;所以,为obj1添加的name属性,通过obj2也可以访问的到。

3. 传递参数

我们都知道基本类型是按值访问的,因为可以访问保存在变量中的实际的值。

所有函数的参数都是按值传递的。

基本类型:基本类型值的传递如同基本类型变量的复制一样;

在向参数传递值,被传递的值会被复制给一个局部变量(命名参数),因此这个局部变量的变化不会反映在函数的外部。
例如:

function fn(num) {
 num += 10;
 return num;
}
var a = 10;
var result = fn(a);
console.log(result);  //20
console.log(a);    //10

代码中可知:参数num和变量a互不相识,只是有着相同的值而已,用完之后,你还是你,我还是我,互不干政。
引用类型:引用类型的传递如同引用类型变量的复制一样;
在向参数传递值时,会把这个值在内存中的地址复制给一个局部变量,因此这个局部变量的变化会反映在函数的外部。
例如:

function fn(obj) {
 obj.name = '杨子龙';
}
var person = new Object();
fn(person);
console.log(person.name);   //杨子龙

代码中可知:在这个函数内部,参数obj和变量person引用的是同一个对象Object,所以,你不动我也不动,你动我也动,你中有我,我中有你,情义绵绵,经久不息……
也就是说:即使变量person是按值传递的,但是参数obj(想象成局部变量)还是会按引用来访问同一个对象。
访问变量有按值和按引用两种方式,参数只能按值传递。

4. 检测类型

基本类型:typeof
引用类型:instanceof(对象或null)
例如:

var a = 'Yang Zilong';
var b = 24;
var c = '';
var d = true;
var e;
var g = undefined;
var f = null; // 比较特殊
var h = new Object();

console.log(typeof a); //string
console.log(typeof b); //number 
console.log(typeof c); //string
console.log(typeof d); //boolean
console.log(typeof e); //undefined
console.log(typeof g); //undefined
console.log(typeof f); //object
console.log(typeof h); //object

所用引用类型的值都是Object的实例。
如下:

var person = new Object();
var num = [1,2, 3];
var pattern = /.at/i;
console.log(person instanceof Object);  //true
console.log(num instanceof Object);  //true
console.log(num instanceof Array);   //true
console.log(pattern instanceof Object); //true
console.log(pattern instanceof RegExp); //true

使用instanceof检测基本类型,会返回false,基本类型不是对象。

以上所述是小编给大家介绍的JavaScript 的变量详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
js为什么不能正确处理小数运算?
Dec 29 Javascript
浅谈Sticky组件的改进实现
Mar 22 Javascript
jQuery中通过ajax调用webservice传递数组参数的问题实例详解
May 20 Javascript
plupload+artdialog实现多平台上传文件
Jul 19 Javascript
easyui messager alert 三秒后自动关闭提示的实例
Nov 07 Javascript
使用vue和datatables进行表格的服务器端分页实例代码
Jun 07 Javascript
vue+Element-ui实现分页效果实例代码详解
Dec 10 Javascript
jQuery实现的网站banner图片无缝轮播效果完整实例
Jan 28 jQuery
vue-devtools的安装和使用步骤详解
Oct 17 Javascript
Vue微信公众号网页分享的示例代码
May 28 Javascript
使用 Github Actions 自动部署 Angular 应用到 Github Pages的方法
Jul 20 Javascript
vant中的toast轻提示实现代码
Nov 04 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
Mar 08 #Javascript
小程序测试后台服务的方法(ngrok)
Mar 08 #Javascript
详解JavaScript函数callee、call、apply的区别
Mar 08 #Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 #Javascript
详解小程序循环require之坑
Mar 08 #Javascript
详解js 创建对象的几种方法
Mar 08 #Javascript
浅谈Javascript常用正则表达式应用
Mar 08 #Javascript
You might like
使用PHPMailer实现邮件发送代码分享
2014/10/23 PHP
PHP微信分享开发详解
2017/01/14 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
javascript 读取图片文件的大小
2009/06/25 Javascript
JavaScript高级程序设计 阅读笔记(十二) js内置对象Math
2012/08/14 Javascript
使用时间戳解决ie缓存的问题
2014/08/20 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
Ionic实现页面下拉刷新(ion-refresher)功能代码
2016/06/03 Javascript
第一次记录Bootstrap table学习笔记(1)
2017/05/18 Javascript
jQuery实现html双向绑定功能示例
2017/10/09 jQuery
Vue的watch和computed方法的使用及区别介绍
2018/09/06 Javascript
关于vue的npm run dev和npm run build的区别介绍
2019/01/14 Javascript
150行代码带你实现微信小程序中的数据侦听
2019/05/17 Javascript
vue中实现拖动调整左右两侧div的宽度的示例代码
2020/07/22 Javascript
django自定义Field实现一个字段存储以逗号分隔的字符串
2014/04/27 Python
Python如何为图片添加水印
2016/11/25 Python
浅谈Django学习migrate和makemigrations的差别
2018/01/18 Python
TensorFlow如何实现反向传播
2018/02/06 Python
快速排序的四种python实现(推荐)
2019/04/03 Python
Python中xml和dict格式转换的示例代码
2019/11/07 Python
django 实现后台从富文本提取纯文本
2020/07/02 Python
Python logging日志模块 配置文件方式
2020/07/12 Python
python跨文件使用全局变量的实现
2020/11/17 Python
用python实现一个简单的验证码
2020/12/09 Python
canvas绘制圆角头像的实现方法
2019/01/17 HTML / CSS
加拿大女鞋品牌:ALDO
2016/11/13 全球购物
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
Kickers鞋英国官网:男士、女士和儿童鞋
2021/03/08 全球购物
会计岗位职责模板
2014/03/12 职场文书
yy司仪主持词
2014/03/22 职场文书
2014年减负工作总结
2014/12/10 职场文书
爱心募捐感谢信
2015/01/22 职场文书
学校教学管理制度
2015/08/06 职场文书
青年志愿者活动感想
2015/08/07 职场文书
php png失真的原因及解决办法
2021/10/24 PHP
Ruby处理CSV数据方法详解
2022/04/18 Ruby