一.不可改变的原始值(栈数据)(五个)

数字(number),字符串(string),布尔值(boolean),undefined,null

其中;undefined是未定义的意思,而null是空的意思,他们俩的区别在于,null有值,不过这个值是空值,而undefined是未定义,完全没有值的意思。null一般用作占位。

var a = 4;
var b = a;
a = 10;
console.log(b);//
//原始值是把一个值a放到另一个值b里面,改了第一个值a,第二个之值b不变

二.引用值(堆数据)

数组(array),对象(object),函数(function)

注意:只要对变量进行赋值就会进行内存的重新申请

1.

var arr = [1, 2];
var arr1=arr;
arr.push(3);
console.log(arr1); //[1, 2, 3]
//引用值时把第一个值放到第二个值里面,改变第一个值,第二个值也改变
//引用值是在栈内存里面存放堆的地址,拷贝的是地址,所以改变了arr,实际上是改变了arr指向的地址内存放的内容,而arr和arr1指向同一个地址,故arr1也跟着变

地址

变量

存储值

0x0001

arr

[1,2]    [1,2,3]  <--arr.push(3)

0x0002

arr1

0x0001

2.

var arr = [1,2];
var arr1 = arr;
arr = [1,3];
console.log(arr1);//[1,2];
//arr = [1,3]实际上是在堆内另建了一个地址,arr指向了新的地址,而arr1还是指向原来的地址,故arr1值不变

地址

变量

存储值

0x0001

arr

[1,2]

0x0002

arr1

0x0001

0x0003

arr

[1,3]

3.要避免使用连续赋值符号:下面举两个例子

var a = {n:1};
var b = a;
a.n= a={m:1};
console.log(a);//{m:1}
console.log(b);//{n:{m:1}}

1.var a = {n:1},在内存中申请两个地址,分别存放a和n;

2.var b = a;申请一个地址存放b,值指向a的地址;

3.a.n= a={m:1};

(1)(这里对变量进行了赋值,因此要重新申请内存)先申请了内存地址n(0x0004)和a(0x0005);由于n值占用了新的内存,故0x0001处 存储值由n:0x0002变为n:0x0004;

(2)赋值;a={m:1},申请m地址(0x0006),

因此:a :  {m:0x0006}--->{m:1}

   b: {0x0001}--->{n:0x0004}---->{ n:0x0005}---->{n:{m:0x0006}}--->{n:{m:1}}

地址

变量

存储值

0x0001

    a  (1)

n:0x0002  n:0x0004 ---(1)

0x0002

    -n-  (1)

1

0x0003

b

0x0001

0x0004

n    (1)

0x0005

0x0005

a    (1)

m:0x0006    (2)

0x0006

 m    (2)

1         (2)

var a = {n:1};
var b = a;
a={m:1};//a重新赋值,换了一个房间,b仍然指向原来的房间(地址)
a.n =a;
console.log(a);//{m:1,n:{m:1,n:{..}}}//一直循环
console.log(b);//{n:1}

js基本语法之 值类型(数据类型)(变量类型)的更多相关文章

  1. python限定方法参数类型、返回值类型、变量类型等

    typing模块的作用 自python3.5开始,PEP484为python引入了类型注解(type hints) 类型检查,防止运行时出现参数和返回值类型.变量类型不符合. 作为开发文档附加说明,方 ...

  2. js面试题知识点全解(一变量类型和计算)

    1.js中使用typeof能得到哪些类型 2.何时使用===和== 3.js中的内置函数 4.js变量按存储方式区分为哪些类型,并描述其特点 5.如何理解json 以下对这些问题的知识点做一些总结: ...

  3. js是这样判断值的数据类型的

    js如何判定给定值的数据类型? typeof typeof "a" // "string" typeof 1 // "number" typ ...

  4. js技术之运用"typeof()"运算符校验变量类型

    一.简介 typeof();个人的理解就是可以判断出对应的变量类型,而且是用统一的类型 如:数字,小数等..... 都用Number来表示 而:所有对象都用object表示 二.探索到 typeof的 ...

  5. JavaScript总体的介绍【JavaScript介绍、定义函数方式、对象类型、变量类型】

    什么是JavaScript? 我们可以从几个方面去说JavaScript是什么: 基于对象 javaScript中内置了许多对象供我们使用[String.Date.Array]等等 javaScrip ...

  6. C#中null值属于什么变量类型

    今天学习发现有段代码的输出结果有些理解不了,如图1,输出的结果全部为 false: 图1 后来和同事讨论研究了一下才明白,原来是这样:↓ class Program { static void Mai ...

  7. js中typeof可以准确判断哪些变量类型

    typeof 运算符返回一个用来表示表达式的数据类型的字符串.  可能的字符串有:"number"."string"."boolean".& ...

  8. 深入理解PHP内核(五)变量及数据类型-变量的结构和类型

    原文链接:http://www.orlion.ga/238/ 编程语言的类型可以分为强类型和弱类型两种,PHP是弱类型语言,但是C语言是强类型语言.在官网PHP实现内部,所有变量使用同一种数据结构(z ...

  9. Java 学习(4):基本数据类型,变量类型

    目录 --- 基本数据类型 --- 变量类型 基本数据类型 变量就是申请内存来存储值.也就是说,当创建变量的时候,需要在内存中申请空间. 内存管理系统根据变量的类型为变量分配存储空间,分配的空间只能用 ...

随机推荐

  1. PHP实现用户登录注册功能

    初学php做了一些比较常见且有用的页面,放在上面记录一下咯 我是用了bootstrap框架里面的模态框做注册登陆页面,这样页面比较美观 页面效果: 注册成功条件/功能: 1)用户名不能冲突 2)两次密 ...

  2. ubuntu 安装R 语言

    我个人的环境是 ubuntu 12.04 64 位桌面版. 我自己在安装R 语言时,发现它依赖的库真不是一般的多,所以我在这里简单记录一下我整个安装过程 首先你需要安装 apt-get install ...

  3. 用C#编写计算器

    零有点问题,而且目前只能做一些简单的运算,+.-.*./.平方.开根号 希望有大佬指正我的错误 感谢 using System;using System.Collections.Generic;usi ...

  4. 如何使用Tomcat自带的日志实现tomcat-juli.jar

    前言 Tomcat自带的日志实现是tomcat-juli.jar,它是对默认的JDK日志java.util.logging进行一定的封装,和标准JDK日志支持相同的配置,但是和log4j等常用的日志框 ...

  5. python连接redis数据库的两种方式

    代码: # __author__ = 'STEVEN' import redis # 方式1,直接连接 # r = redis.Redis(host='192.168.43.22',port=6379 ...

  6. bryce1010专题训练——CDQ分治

    Bryce1010模板 CDQ分治 1.与普通分治的区别 普通分治中,每一个子问题只解决它本身(可以说是封闭的) 分治中,对于划分出来的两个子问题,前一个子问题用来解决后一个子问题而不是它本身 2.试 ...

  7. bzoj3626: [LNOI2014]LCA奇技淫巧+树剖+线段树

    题目求[a,b]到c的lca深度之和   显然是一个满足区间减法的操作 于是简化为 [1,b]到c的lca深度之和 (然并卵╮(╯▽╰)╭)然后就用奇技淫巧发现 a和b的lca深度=先把根节点到a的路 ...

  8. Python相对导入导致SystemError的解决方案(译)

    原文出处: http://stackoverflow.com/   译文出处:yibohu1899 这个问题是如何解决在相对导入的时候,如果出现’System Error’的时候的解决方案.顺带一提, ...

  9. MVC ef 连接数据库

    1.创建数据库 2.创建表 <pre name="code" class="sql">CREATE TABLE [dbo].[Student]( [ ...

  10. 一步步实现自己的ORM(四)

    通过前3章文章,大致对ORM有一定的了解,但也存在效率低下(大量用了反射)和重复代码,今天我们要对ORM进行优化. 具体流程如下: 我们优化的第一个就是减少反射调用,我的思路是定义一个Mapping, ...