风君子博客

  • 首页
  • 业界
  • 前端
  • 运维
  • 建站
  • 软件
  • 生活
  • 后端
  • 创投
  • 运营
  • 程序人生
    • 影视
    • 游戏
    • 句子
    • bootstrap4教程
    • 资源
    • 日期计算器
  • 其他
    • 说说
    • 关于本站
  1. 首页
  2. 前端
  3. 正文

javascript七种数据类型详解 深入了解基本类型和引用类型的值

2018年10月19日 900点热度 0人点赞 0条评论

本文转自:原文链接            作者:percy507

一个变量可以存放两种类型的值,基本类型的值(primitive values)和引用类型的值(reference values)。

ES6 引入了一种新的原始数据类型 Symbol,表示独一无二的值。它是 JavaScript 语言的第七种数据类型,前六种是:Undefined、Null、布尔值(Boolean)、字符串(String)、数值(Number)、对象(Object)。

基本类型

JavaScript 中共有 6 种基本数据类型:Undefined、Null、Boolean、Number、String、Symbol (new in ES 6) !

约定:基本数据类型与原始数据类型等意。

基本数据类型的值是按值访问的。

  • 基本类型的值是不可变的
    var str = "123hello321";
    str.toUpperCase();     // 123HELLO321
    console.log(str);      // 123hello321
    
  • 基本类型的比较是它们的值的比较
    var a = 1;
    var b = true;
    console.log(a == b);    // true
    console.log(a === b);   // false
    

    上面 a 和 b 的数据类型不同,但是也可以进行值的比较,这是因为在比较之前,自动进行了数据类型的 隐式转换。

    • == : 只进行值的比较
    • === : 不仅进行值得比较,还要进行数据类型的比较
  • 基本类型的变量是存放在栈内存(Stack)里的
    var a,b;
    a = "zyj";
    b = a;
    console.log(a);   // zyj
    console.log(b);   // zyj
    a = "呵呵";       // 改变 a 的值,并不影响 b 的值
    console.log(a);   // 呵呵
    console.log(b);   // zyj
    

图解如下:栈内存中包括了变量的标识符和变量的值

javascript七种数据类型详解 深入了解基本类型和引用类型的值-风君子博客

引用类型

除过上面的 6 种基本数据类型外,剩下的就是引用类型了,统称为 Object 类型。细分的话,有:Object 类型、Array 类型、Date 类型、RegExp 类型、Function 类型 等。

引用类型的值是按引用访问的。

  • 引用类型的值是可变的
    var obj = {name:"zyj"};   // 创建一个对象
    obj.name = "percy";       // 改变 name 属性的值
    obj.age = 21;             // 添加 age 属性
    obj.giveMeAll = function(){
      return this.name + " : " + this.age;
    };                        // 添加 giveMeAll 方法
    obj.giveMeAll();
    
  • 引用类型的比较是引用的比较
    var obj1 = {};    // 新建一个空对象 obj1
    var obj2 = {};    // 新建一个空对象 obj2
    console.log(obj1 == obj2);    // false
    console.log(obj1 === obj2);   // false
    

    因为 obj1 和 obj2 分别引用的是存放在堆内存中的2个不同的对象,故变量 obj1 和 obj2 的值(引用地址)也是不一样的!

  • 引用类型的值是保存在堆内存(Heap)中的对象(Object)
    与其他编程语言不同,JavaScript 不能直接操作对象的内存空间(堆内存)。

    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
    };
    

图解如下:

  • 栈内存中保存了变量标识符和指向堆内存中该对象的指针
  • 堆内存中保存了对象的内容

javascript七种数据类型详解 深入了解基本类型和引用类型的值-风君子博客

检测类型

  • typeof:经常用来检测一个变量是不是最基本的数据类型
    var a;
    typeof a;    // undefined
    
    a = null;
    typeof a;    // object
    
    a = true;
    typeof a;    // boolean
    
    a = 666;
    typeof a;    // number 
    
    a = "hello";
    typeof a;    // string
    
    a = Symbol();
    typeof a;    // symbol
    
    a = function(){}
    typeof a;    // function
    
    a = [];
    typeof a;    // object
    a = {};
    typeof a;    // object
    a = /aaa/g;
    typeof a;    // object   
    
  • instanceof:用来判断某个构造函数的 prototype 属性所指向的对象是否存在于另外一个要检测对象的原型链上
    • 简单说就是判断一个引用类型的变量具体是不是某种类型的对象
      ({}) instanceof Object              // true
      ([]) instanceof Array               // true
      (/aa/g) instanceof RegExp           // true
      (function(){}) instanceof Function  // true
      

更详细的类型检测请看参考资料!

有错误的地方,欢迎大家指出来!

参考资料

  • 【文章】[ JS 进阶 ] 基本类型 引用类型 简单赋值 对象引用(推荐)
  • 【Stack Overflow】Javascript by reference vs. by value
  • 【文章】[[JS] 让人犯晕的JavaScript变量赋值](http://hellobug.github.io/blo...
  • 【文章】如何检查JavaScript变量类型?(推荐)
  • 【文章】Stack的三种含义
标签: js
最后更新:2018年10月19日

风君子

独自遨游何稽首 揭天掀地慰生平

点赞
< 上一篇
下一篇 >

猜你喜欢

  • 华为 HarmonyOS 开源鸿蒙方舟编译器前端工具“方舟 JS 运行时”正式开源

  • 禁止鼠标右键代码 禁止按键F5和禁止鼠标右键菜单 js代码

  • JS基础测试: typeof delete window.name 的返回结果是什么?​

  • JS实现汇率换算

  • js实现简单五子棋游戏源码

  • 【FCC】番茄时钟pomodoro clock网页版

  • 【FCC】Pairwise js算法

  • 【FCC】Map the Debris

  • 【FCC】Make a Person

  • 【FCC】Friendly Date Ranges

  • 【FCC】No repeats please

  • 【FCC】Inventory Update

文章评论

取消回复

风君子

独自遨游何稽首 揭天掀地慰生平

最新 热点 随机
最新 热点 随机
苹果 Apple Store 零售店扩展 Today at Apple 创想营活动,新增 7 座城市 曝骁龙 8 + 首批新机调试 6 月系统封包,年底马上发布台积电 + ARM 新架构骁龙 8 Gen 2 芯片 快手高管解读 Q1 财报:25% 月活用户创作内容,中长尾创作者内容贡献了 80% 以上播放量 【IT之家开箱】Redmi Note 11T Pro + 子夜黑图赏 数源科技:目前 5G 通信壳仅适用于华为 P50 Pro 机型,业务占比较小 苹果 Apple Watch 全新表盘“彩虹线条”上线,新款彩虹版表带开启预订,售价 379 元 999 元至 1299 元,小米 Redmi Note11 SE 5G 手机发布:搭载天玑 700 芯片,全系标配 128GB 存储 【IT之家评测室】红米 Note 11T Pro+ :首款 A + 认证 LCD 屏幕闪亮登场 AMD 公布智能访问存储技术:支持微软 DirectStorage,缩短游戏加载时间 首发价 2499 元,小米米家冰箱对开门 610L 墨羽岩发布:一级能效,20 格分区,支持 App 远程操控
抖音IP属地准确吗e地跑:全国线路覆盖率达92.5%,将升级智能扫码加油功能完成加油监控米哈游《原神》全球用户支出将突破 27 亿美元:打破最高季度纪录,中美日韩德支出最多索尼 QD-OLED 画谛系列电视 A95K 国行即将发布格力电器 2021 年营收 1878.69 亿元同比增长 11.69%施耐德电气顾俊:5G赋能,制造业智能化转型“加速”苹果将 iPad Air 2 和 iPad Mini 2 加入过时产品名单IDC:2021 年中国网络市场规模达 102.4 亿美元,路由器市场同比下滑 2.6%波导股份第一季度净利润 552.94 万元,同比增长 75.79%我们常用谁言寸草心报得三春晖歌颂母爱,它的作者是
微信零钱支付限额 DDI 短缺,消息称京东方 iPhone OLED 面板生产问题将持续至 5 月 电脑长期不用多久充一次电? 作为担保人,如何取消担保,解除还款责任? 金山云在美上市:开盘上涨超20%,市值超40亿美元 余额宝是理财产品吗 招商信用卡成功的前兆是什么? BizLink 发布全球首款 DP80 线材,支持 DisplayPort 2.0 标准 科创板上市规则 雷军:小米将进行6G相关预研
标签聚合
借款人 银行 特斯拉 汽车 科技 信用卡 芯片 支付宝 微软 谷歌 华为 马斯克 美国 小米 利率 iphone 手机 腾讯 业界 苹果 快科技 额度 三星 京东 秘籍 利息 贷款 银行卡 股票 IT资讯
Tags
酒 胡萝卜 食物 私房菜 有什么好处 水果 能吃 鸡蛋 身体 会胖吗 副作用 吃什么 相克 好处 饮食 作用 土豆食谱 方法 牛肉 豆腐 糖 热量 茄子 好吃 营养 皮肤过敏 区别 菜谱 牛肉食谱 功效 怎么做 营养价值 豆腐食谱 维生素 土豆 热菜 食用方法 常吃 健康 排骨 汤类 高血压 牛奶 糖尿病人 做法 吃法 下饭菜 海鲜 一起吃 排骨食谱
最近评论
九九 发布于 3 周前(05月06日) 也可能是 IP2LOCATION 数据
风君子 发布于 5 个月前(12月20日) 直播这么赚钱的吗?
wanif 发布于 5 个月前(12月18日) 采用你提供的pe制作u盘后无法识别mac硬盘,如何解决?
robotunl 发布于 5 个月前(12月18日) 可以用了,感谢
robotunl 发布于 5 个月前(12月17日) DISM++链接下不了了啊,能再发一个么。 还有怎么制作和博主一样的PE u盘。
tiantian 发布于 10 个月前(08月08日) 谢谢分享!
欣姐 发布于 1 年前(02月06日) 很有道理啊
我在東莞上班睡覺工資一千五六 发布于 1 年前(12月16日) 东莞台商都开始搬迁河源,梅州包括赣州一些地方要么就是内地城市,因为电子厂需要大量人力所以基本上都是中...
我在東莞上班睡覺工資一千五六 发布于 1 年前(12月16日) 这个怎么有意思了,是不是太真实了 :smile: :smile:
东莞石碣维信五金制品有限公司睡觉一千五六 发布于 1 年前(12月15日) 台商大陆模式搞习惯了去了印度未必成功 :idea:

COPYRIGHT © 2021 风君子博客. ALL RIGHTS RESERVED.

豫ICP备14018241号