JS中的数据类型和变量内存
1. JS中存在5种简单数据类型和1种复杂数据类型:
- 5种简单数据类型:Undefined, Null, Boolean, Number, String.
- 1种复杂数据类型:Object.
上面的5种简单数据类型又称为基本数据类型,复杂数据类型又称为引用数据类型。基本数据类型保存在栈内存,引用数据类型实际上是一个指针,这个指针也保存在栈中,但是这个指针指向的对象则保存在堆内存中。
2. 两种数据访问方式
- 基本数据类型:按值访问,读写的是它们实际保存的值。
- 引用数据类型:按引用访问,读写它们时需要先从栈中读取堆内存地址,然后找到保存在堆内存中的值。

3. 两种类型的复制
- 基本数据类型变量的复制:从一个变量向另一个变量复制时,会在栈中创建一个新值,然后把值复制到为新变量分配的空间中。
- 引用数据类型变量的复制:复制的是存储在栈中的指针,将指针复制到栈中为新变量分配的空间中,而这个指针副本和原指针指向的是同一个堆内存中的对象;复制操作后两个变量实际上将引用同一个对象,因此改变其中一个将影响到另外一个。


4. 两种变量类型的检测
- typeof操作符一般用来检测基本数据类型,返回以下某个字符串:'undefined', 'boolean', 'number', 'string', 'object', 'function'。null, Array, Date, RegExp, Object都返回'object'。function虽然也是对象的一种,但是函数具有某些特殊属性,因此通过typeof来区分函数和其他对象是有必要的。
- instanceof用于检测引用数据类型,可以检测到具体的类型,如果变量是引用类型的实例则返回true。
typeof操作符可以用来判断一个变量是否存在:
if(typeof a != 'undefined'){
//对a变量的操作
}
而不要通过以下方式去判断a变量是否存在:
if(a){
//对a的操作
}
因为如果a变量未声明会报错。
检测数组有两种方法:
if(value instanceof Array){}
if(Array.isArray(value)){}
按照前面讲的常规的应该用方法1来检测数组这种引用类型,但是由于方法1存在缺陷(具体什么缺陷,可以参考JavaScript高级程序设计第三版),最好使用方法2来检测。
5. 函数参数的传递
JS中所有函数的参数都是按值传递:
function setName(obj){
obj.name = "Nicholas";
obj = new Object();//将函数局部变量obj指向另一个新的变量
obj.name = "Greg";
}
var person = new Object();
setName(person);//传递栈中的指针值
console.log(person.name);//Nicholas
JS中的数据类型和变量内存的更多相关文章
- JS中判断数据类型的几种方法
1⃣️首先我们来了解一下js中的数据类型 1.基本数据类型:Undefined.Null.Boolean.Number.String(值类型) 2.复杂数据类型:Object(引用类型) (值类型和引 ...
- 如何判断js中的数据类型?
js六大数据类型:number.string.object.Boolean.null.undefined string: 由单引号或双引号来说明,如"string" number: ...
- 浅谈js中的数据类型,使用typeof获取js数据类型
JS中的数据类型 1):Undefined——值未定义 注:Undefined类型只有一个值,即特色的undefined.在使用var声明变量但未对其加以初始化时,这个变量的值就是undefined ...
- js中的数据类型及其转换
Js中的数据类型 Js中的数据类型一共有六种,即number,string,boolean,underfine,null,object. 一,number Number数据类型指的是数字,可以为整型, ...
- JS中的运算符 以及变量和输入输出
1.算术运算(单目运算符) + 加 .- 减.* 乘. / 除. % 取余.++ 自增.-- 自减. >>> +:有两种作用,链接字符串/加法运算,当+两边全为数字时,进行加法运算, ...
- JS中的数据类型和转换
一.JS中的数据类型 js中的数据类型可以分为五种:number .string .boolean. underfine .null. number:数字类型 ,整型浮点型都包括. string:字符 ...
- js中的数据类型、以及浅拷贝和深拷贝
一.js中的数据类型 1.基本类型(值类型):Undefined.Boolean.String.Number.Symbol 2.引用类型:函数.数组.对象.null.new Number(10)都是对 ...
- Javascript高级编程学习笔记(3)—— JS中的数据类型(1)
前一段时间由于事情比较多,所以笔记耽搁了一段时间,从这一篇开始我会尽快写完这个系列. 文章中有什么不足之处,还望各位大佬指出. JS中的数据类型 上一篇中我写了有关JS引入的Script标签相关的东西 ...
- js中的数据类型和判断数据类型
js中的数据类型和判断数据类型 基本数据类型,六大基本数据类型:字符串(String).数字(Number).布尔(Boolean).对象(Object).空(Null).未定义(Undefined) ...
随机推荐
- article元素以及section
<p>发表日期:<time pubdate="pubdate">2015/10/30</time></p> article元素有自己 ...
- CMake系列之二:入门案例-单个源文件
编写一个源码文件 如下 #include<stdio.h> #include<stdlib.h> double power(double base,int exponent) ...
- PAT 1037 在霍格沃茨找零钱
https://pintia.cn/problem-sets/994805260223102976/problems/994805284923359232 如果你是哈利·波特迷,你会知道魔法世界有它自 ...
- [kali] 安装完kali之后允许远程ssh
1. 安装kali 2.控制台登录kali 3. 修改 /etc/ssh/sshd_config 4.将 permitrootlogin 前面的注释去掉,并且后面改为yes 5.然后重启ssd服务 / ...
- remove()与empty()的区别
1.empty() - 从被选元素中删除子元素: 2.remove() - 删除被选元素(及其子元素): 3.remove() 方法也可接受一个参数,允许您对被删元素进行过滤.
- MidoNet 安装(Kilo RDO)(最老版)
一.初始化(Kilo RDO)版(最老版) 环境介绍 系统 CentOS 7.3 主机ip 10.211.55.5 主机名 midonet 1.配置yum源 ###OpenStack源 yum ins ...
- JDK8字符串拼接的正确姿势
1. 对列表中的元素进行拼接 以前,对一个列表中的字符串进行拼接时,常见的代码如示例1所示: 代码示例1 List<String> ids = ImmutableList.of(" ...
- Layui_2.x_上传插件使用
一.上传类 package com.ebd.application.common.utils; import java.awt.geom.AffineTransform; import java.aw ...
- Ant Trip HDU - 3018(欧拉路的个数 + 并查集)
题意: Ant Tony和他的朋友们想游览蚂蚁国各地. 给你蚂蚁国的N个点和M条边,现在问你至少要几笔才能所有边都画一遍.(一笔画的时候笔不离开纸) 保证这M条边都不同且不会存在同一点的自环边. 也就 ...
- String类型的特殊之处
String是一种特殊的引用类型,那么它究竟特殊在哪里? 请看看下面这个程序,输出什么结果? public static void changeStr(String str) { str = &quo ...