JS中的基本数据类型与引用数据类型
JS中的数据类型可以这样分类:
原始数据类型: number, string ,boolean, undefined, null, symbol
基本类型(简单类型):
- 值类型: number((整数/小数/NaN));string,boolean
- 空类型:null,undefined
- 还有 symbol (ES6)
复杂类型(引用类型):object
基本数据类型
JavaScript 中共有 6 种基本数据类型:undefined、null、boolean、number、string、symbol (new in ES 6) 。
- 访问基本数据类型是按值访问的。
- 基本类型的值不可变
var str = "123HelloWorld321";str.toUpperCase(); console.log(str.toUpperCase()); // 123HELLOWORLD321 console.log(str); // 123HelloWorld321
- 基本类型的比较是它们的值的比较
var a = 1;var b = '1';console.log(a == b); // trueconsole.log(a === b); // false
上面 a 和 b 的数据类型不同,但是也可以进行值的比较,这是因为在比较之前,自动进行了数据类型的 隐式转换。
- 基本类型的变量存放在栈内存里
var a = 10; var b = a; b = 20; console.log(a); console.log(b);
b获取的是a值的一个副本,虽然两个变量的值相等,但是两个变量保存了两个不同的基本数据类型值。所以b值的改变不会影响a的值。
值类型作为函数的参数,传递的是值
function f1(x) {x=100;}var num1=10;f1(num1); //num1的值复制了一份给了x,然后 x被重新赋值为100, x的值变了,但是num1的值没有变,console.log(num1); // num1的值还是 10
引用数据类型
Object 类型,细分的话有:Object 类型、Array 类型、Date 类型、RegExp 类型、Function 类型等。
引用类型的值是按引用来访问的。
- 引用类型的值是可变的。
var obj = {name:"lmg"}; // 创建一个对象 obj.name = "xiaoming"; // 改变 name 属性的值 obj.age = 18; // 添加 age 属性 obj.sayHi = function(){return this.name + " : " + this.age; }; // 添加 sayHi 方法 obj.sayHi();
- 引用类型的比较是引用的比较
var obj1 = {}; // 新建一个空对象 obj1 var obj2 = {}; // 新建一个空对象 obj2 console.log(obj1 == obj2); // false console.log(obj1 === obj2); // false
obj1 和 obj2 分别引用的是存放在堆内存中的2个不同的对象,故变量 obj1 和 obj2 的值(引用地址)也是不一样的。
- 引用类型的值是保存在堆内存中的对象
var a = {name:"percy"}; var b; b = a; a.name = "zyj"; console.log(b.name); // zyj b.age = 22; console.log(a.age); // 22 var c = {name: "zyj",age: 22 };
图解:
注:栈内存中保存了变量标识符和指向堆内存中该对象的指针。堆内存中保存了对象的内容。- 引用类型作为函数的参数,传递的是引用(地址)
var obj={name:'xiaoming' }; function f2(obj2) {obj2.name='xiaohong'; } console.log(obj.name); //xiaoming f2(obj); //obj的地址复制一份给了obj2,地址相同,指向同一对象, 调用时name改成了xiaohong,xiaoming就被替换掉了, console.log(obj.name); // xiaohong
案例分析:
//案例1分析: 会画缓存图var n1=10;var n2=n1;n1=20;console.log(n1); //20console.log(n2); //10
//案例2:var n3=50;function ff(n3) { // 这里的n3是形参, 实参与形参即使名字相同。也不是同一个变量n3=60;console.log(n3); //60}ff(n3); //注意:这里的n3是实参console.log(n3); //这里是函数外的n3,为50, 函数里面的n3是没有关系的
//案例3:var n4=55;var n5=66;function f_(n,n4) { //n,n4在函数内部是局部变量n=100; //局部变量,它的传进来的值对应外面的n4, 55n4=100; //局部变量,它的传进来的值对应外面的n5, 66n5=100; //注意:!!隐式全局变量!!console.log(n); // 100console.log(n4); // 100console.log(n5); // 100}f_(n4,n5);console.log(n4); // 55, 这个是全局变量n4console.log(n5);// 100,这个是函数中的隐式全局变量console.log(n); // ReferenceError: n is not defined报错:这个是函数中的局部变量,访问不到
//案例4:function Person(name,age,salary) { //自定义构造函数this.name=name;this.age=age;this.salary=salary;}function fff(person) { //创建了普通的函数person.name='ls'; //name修改了, 变成了lsperson=new Person('aa',18,10); //新创建的一个对象,person指向了这个对象, person 和p指向的对象不同了}var p = new Person('zs',18,1000);console.log(p.name); //zsfff(p); //函数调用,对象p的地址复制一份给person,所以他们指向同一个对象console.log(p.name); //ls
数据类型的检测方法:typeof 与 instanceof
typeof: 主要用来检测一个变量是不是一个基本的数据类型,返回的是具体的数据类型。
var a; console.log(typeof a); //undefined 输出的这些类型都是小写的字符串var b = null; console.log(typeof b); // object 注意var c = 123; console.log(typeof c); // numbervar d = '123'; console.log(typeof d); // stringvar e = true; console.log(typeof e); // booleanvar f = Symbol(); console.log(typeof f); // symbolvar g = function () { console.log(g); }; console.log(typeof g); // functionvar h = []; console.log(typeof h); // objectvar i = {}; console.log(typeof i); // objectvar j = /123/g; console.log(typeof j); // object
instanceof:判断一个引用类型的变量具体是不是某种类型的对象,返回的是布尔值。
console.log(g instanceof Function); // true console.log(h instanceof Array); // true console.log(i instanceof Object); // true console.log(j instanceof RegExp); // true
参考:
JavaScript 深入了解基本类型和引用类型的值
JavaScript中基本数据类型和引用数据类型的区别
JS中的基本数据类型与引用数据类型相关推荐
- JavaScript中的基本数据类型与引用数据类型
JavaScript中的基本数据类型与引用数据类型 转载自:https://www.cnblogs.com/c2016c/articles/9328725.html 1.栈(stack)和堆(heap ...
- ie9无法获取未定义或 null 引用的属性“indexof”_前端JS基础篇(二)JS基本数据类型和引用数据类型及检测数据类型方法...
JS中的数据类型 (一).基本数据类型(值类型) 1.number:数字 -12.12.5.-12.5 0这些数字都是number: js中增加了一个number类型的数据:'NaN' typeof ...
- js 基本数据类型和引用数据类型
1.数据类型 JS分两种数据类型: 基本数据类型:Number.String.Boolean.Null. Undefined.Symbol(ES6),这些类型可以直接操作保存在变量中的实际值. 引用数 ...
- js基本数据类型和引用数据类型有什么区别?
js基本数据类型和引用数据类型有什么区别? 1.基本数据类型和引用数据类型包括哪些? 基本数据类型: 在javascript中,有6种基本数据类型:string.number.boolean.null ...
- java 数据类型分为_JAVA中分为基本数据类型及引用数据类型
byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型,在内存中占16位,即2个字节,取值范围-32768~32717,默认值 ...
- java中数组的返回值是什么类型_java基础学习:数组的常用操作与基础二维数组用法、及基本数据类型和引用数据类型赋值的区别...
一.Arrays jdk中为了便于开发,给开发者提供了Arrays类,其中包含了很多数组的常用操作.例如快速输出.排序.查找等. 1.数组的常用方法 1.数组以字符串形式的输出,2.sort对数组排序 ...
- [转载] JAVA中分为基本数据类型及引用数据类型
参考链接: C++和Java中布尔数据类型的比较 一.基本数据类型: byte:Java中最小的数据类型,在内存中占8位(bit),即1个字节,取值范围-128~127,默认值0 short:短整型, ...
- Java中的基本数据类型和引用数据类型
一.数据类型 Java中的数据类型分为两大类,基本数据类型和引用数据类型. 1.基本数据类型 基本数据类型只有8种,可按照如下分类 ①整数类型:long.int.short.byte ②浮点类型:fl ...
- JavaScript中基本数据类型和引用数据类型的区别
1.基本数据类型和引用数据类型 ECMAScript包括两个不同类型的值:基本数据类型和引用数据类型. 基本数据类型指的是简单的数据段,引用数据类型指的是有多个值构成的对象. 当我们把变量赋值给一个变 ...
最新文章
- appium ios 真机自动化环境搭建
- java 循环查询list_Java用list储存,遍历,查询指定信息过程详解
- 手机的小窗口怎么弄_荣耀9X如何设置桌面小工具?划重点,这个要考
- [UE4]响应鼠标点击
- iphone11没有电池小组加件_iPhone 11系列工信部数据:全系4GB运存电池最大达3969mAh...
- Spark Shuffle 堆外内存溢出问题与解决(Shuffle通信原理)
- 快速排序算法之我见(附上C代码)
- 线性可分支持向量机与硬间隔最大化
- Missing artifact com.oracle:ojdbc7:jar:12.1.0.1. 配置maven.pom.xml,ojdbc.jar包出错
- 批处理文件(bat文件)注册dll批量注册dll
- 中兴2021批笔试题解
- 《东周列国志》第四十九回 公子鲍厚施买国 齐懿公竹池遇变
- 新概念英语第二册课文电子版_新概念英语第二册:课文+音频+教学视频合集(可下载)...
- ios7禁止屏幕旋转,强制竖屏
- 【经验分享】用PS如何将图片的四角做成圆弧角
- JavaScript 浏览器端 this的指向性问题
- 健身为什么要吃肌酸!肌酸四大作用
- LNK1181:无法打开输入文件“release/.obj“
- 【KATA练习日记】关于std::accumulate的使用
- 西邮Linux兴趣小组纳新笔试试题
热门文章
- JQuery AJAX 加载 HTML代码“lt”形式的。怎么解析成形式,并且把img解析成图片输出到浏览器中。...
- 利用优先级队列实现堆栈
- 12 个提高JavaScript编码效率的 NPM 技巧
- Python-DDoS攻击
- Java 11新特性
- Spring Data MongoDB示例
- ASP.NET CORE 使用Consul实现服务治理与健康检查(2)——源码篇
- kafka2.3.1+zookeeper3.5.6+kafka-manager2.0.0.2集群部署(centos7.7)
- 【记录】Docker 安装 activemq
- checksec未完待续~