javascript数据类型分为基本数据类型与复杂数据类型

基本数据类型包括:string,number,boolean,null,undefined,symbol(es6)

复杂数据类型包括:object

1.基本数据类型与复杂数据类型存储上的区分

基本数据类型存储在内存中的栈里面,复杂数据类型存储在内存中的堆里面。

基本数据类型的变量指向内存中的数据,而复杂数据类型指向的实际上是内存中的地址,然后通过地址获取数据

基本数据类型值的存储过程:先在栈里面声明一个变量num,并且赋值为undefined,然后将值1赋值给变量num,声明变量n,并且赋值undefined,然后将变量num的值赋值给n(这一过程实际是在栈中有声明了另一个存储区域,num与n不是通过指针指向同一个栈内存,因此改变num的值并不会使n的值发生改变)

1.var num;    // undefined
2:num = 1;    // 1
3:var n;     // undefined
4:n = num;    // 1
5:num = 2    // 2
6:console.log(n)// 1

复杂数据类型值的存储过程:复杂数据类型在声明了之后,会在堆内存中开辟一块内存区域,用来存放数据。当创建一个对象obj={a: 1}时,会在对内存中开辟一块空间,用来存储对象中的数据。

var obj = {a: 1}
var obj1 = obj;
obj.a = 2;
console.log(obj1.a) //

栈与堆的区分:https://blog.csdn.net/K346K346/article/details/80849966

2.javascript数据类型的区分

在平常的使用过程中,常见的类型判断方法 typeof

var sun1 = undefined;
var sun2 = null;
var sun3 = true;
var sun4 = 10;
var sun5 = '123'
var sun6 = {a: 1};
var sun7 = [1,2,3];
var sun8 = function(){}
var sun9 = new Date(); console.log(typeof sun1); // undefined
console.log(typeof sun2); // object
console.log(typeof sun3); // boolean
console.log(typeof sun4); // number
console.log(typeof sun5); // string
console.log(typeof sun6); // object
console.log(typeof sun7); // object
console.log(typeof sun8); // function
console.log(typeof sun9); // object

看到上面的结果,发现什么问题没?很多的数据类型通过typeof判断实际是不能被检测出来的,比如null,new Date()等...

那么,有什么其他的方法可以进行类型检测吗?

Object.prototype.toString.call(),返回一个表示该对象的字符串,例如"[object type]",type代表了数据的类型。

var toString = Object.prototype.toString;

toString.call(undefined)      //  [object Undefined]
toString.call(null) // [object Null]
toString.call(true) // [object Boolean]
toString.call(10) // [object Number]
toString.call('123') // [object String]
toString.call({}) // [object Object]
toString.call([1,2,3]) // [object Array]
toString.call(new Date) // [object Date]
toString.call(function(){}) // [object Function]
toString.call(Math) // [object Math] // JavaScript 1.8.5后修改
toString.call(undefined) // [object Undefined]
toString.call(null) // [object Null]

参考地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/toString

每天五分钟-javascript数据类型的更多相关文章

  1. 【JavaScript的五种基本数据类型及转换】

    js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Null,Undefined),和一种混合数据类型就是特殊的(Object). "undefined& ...

  2. JavaScript 基础(一) - JavaScript的引入方式,JavaScript 变量命名规则,JS 的五种基本数据类型,ECMAScript 算数运算符,逻辑运算符

    JavaScript的引入方式 直接编写 <!DOCTYPE html> <html lang="en"> <head> <meta ch ...

  3. javascript中五种基本数据类型

    前言: JavaScript中有五种基本数据类型(也叫做简单数据类型)分别为:undefined.null.bolean.number.string:另外还含有一种复杂的数据类型:object. 深入 ...

  4. 前端(五):JavaScript面向对象之内建对象

    一.数据类型 js中数据类型分为两种,原始数据累次能够和引用数据类型. 1.原始数据类型 Undefined.Null.Boolean.Number.String是js中五种原始数据类型(primit ...

  5. 关于 JavaScript 数据类型判断

    在 JavaScript 中,有 undefined.null.number.string.boolean 五种基本数据类型,另外,有一种复杂数据类型 object ,类似于 C# 中值类型.引用类型 ...

  6. javascript数据类型、初始化

    Javascript数据类型有6种: 数值型数据类型(Number): 字符串(String): 布尔型数据(Boolean): 对象数据(Object): 空(Null): 未定义(Undefine ...

  7. 五分钟学习React(三):纯HTML代码搭建React应用

    上一期我们使用了React官方的脚手架运行React应用.大家可能会觉得这种方法很繁琐,需要配置各种第三方插件.JQuery时代的前端真是让人怀念.这一期,我就带领大家创建一个"怀旧版&qu ...

  8. 五分钟学习React(一): 什么是React

    在前端的世界里,我们要处理的文件不是太多,而是太少.每天开发项目将html.css.js.图片.字体文件都像大杂烩一般加载都网页上.当应用变得越来越臃肿的时候,会发现js用了那么多全局变量,css的继 ...

  9. js基础--javaScript数据类型你都弄明白了吗?绝对干货

    欢迎访问我的个人博客:http://www.xiaolongwu.cn 数据类型的分类 JavaScript的数据类型分为两大类,基本数据类型和复杂数据类型. 基本数据类型:Null.Undefine ...

随机推荐

  1. h5实现实时时钟

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"/> <meta nam ...

  2. 一起学Android之Http访问

    概述 在Android开发中,一般通过网络进行访问服务器端的信息(存储和检索网络中的数据),如API接口,WebService,网络图片等.今天主要讲解Http访问的常用方法,仅供学习分享使用. 涉及 ...

  3. Android底部导航栏(可滑动)----TabLayout+viewPager

    [TabLayout] ①TabLayout是选项卡,在屏幕空间有限的情况下,对不同的空间进行分组.属于android support design,更多的用于新闻上,如果放在底部也可做底部导航栏 ② ...

  4. ionic3 生命周期

    ionic3 总共有8个钩子函数,分别是:onPageLoaded,onPageWillEnter,onPageDidEnter,onPageWillLeave,onPageDidLeave,onPa ...

  5. github 进阶说明

    目录 github 进阶说明 前言 三个目录树 重置 git reset 增加路径的reset 检出 checkout 带路径的checkout 仓库 数据对象 其他 资料 github 进阶说明 前 ...

  6. 【Spring源码分析系列】ApplicationContext 相关接口架构分析

    [原创文章,转载请注明出处][本文地址]http://www.cnblogs.com/zffenger/p/5813470.html 在使用Spring的时候,我们经常需要先得到一个Applicati ...

  7. Implement heap using Java

    public class HeapImpl { private int CAPACITY = 10; private int size = 0; private int[] data; public ...

  8. Scanner类详解

    Scanner类用于获取键盘输入(是一个基于正则表达式的文本扫描器),它可以从文件.字符串.输入流中解析出基本类型值和字符串值.Scanner类提供了多个构造器,不同的构造器可以接收文件.字符串和输入 ...

  9. Java EE中的容器和注入分析,历史与未来

    Java EE中的容器和注入分析,历史与未来 java中的容器 java中的注入 容器和注入的历史和展望 一.java中的容器 java EE中的注入,使我们定义的对象能够获取对资源和其他依赖项的引用 ...

  10. 安装Adobe时出现Adobe Application Manager丢失或损坏解决方法

    很多朋友在安装Adobe系列产品时出现Adobe Application Manager丢失或损坏,这是由于上次安装的Adobe产品没有正确卸载,导致这次安装失败.那么如何解决这一问题呢? 1.下载安 ...