• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号
您的位置:首页 > 程序设计 >JavaScript > js undefined 和 null

js undefined 和 null

作者:pan120283010的博客 字体:[增加 减小] 来源:互联网 时间:2017-08-02

pan120283010的博客通过本文主要向大家介绍了javascript等相关知识,希望对您有所帮助,也希望大家支持linkedu.com www.linkedu.com

undefined

js是一门弱类型语言,声明变量的时候统一通过var或let关键字。但是即使这是一门弱类型语言它也要分类型。在我们定义一个变量不赋初值的时候,系统是不知道这个变量是什么类型的。

var str;    // undefined

undefined表示的是一个还不知道数据类型的变量。

引用阮一峰大牛的一句话:

1995年JavaScript诞生时,最初像Java一样,只设置了null作为表示”无”的值。

但是,JavaScript的设计者Brendan Eich,觉得这样做还不够,有两个原因。

首先,null像在Java里一样,被当成一个对象。但是,JavaScript的数据类型分成原始类型(primitive)和合成类型(complex)两大类,Brendan Eich觉得表示”无”的值最好不是对象。

其次,JavaScript的最初版本没有包括错误处理机制,发生数据类型不匹配时,往往是自动转换类型或者默默地失败。Brendan Eich觉得,如果null自动转为0,很不容易发现错误。

因此,Brendan Eich又设计了一个undefined。

JavaScript的最初版本是这样区分的:null是一个表示”无”的对象,转为数值时为0;undefined是一个表示”无”的原始值,转为数值时为NaN。

null

如果学过其他面向对象语言,肯定知道null是指一个空对象。但是在js中,null不是对象,而是指向空对象的指针。

打印typeof null你会发现结果是一个object,这是设计错误,但是因为有很多代码都是基于这个错误去设计的,为了不影响以前的代码,所以这个错误被保留了下来。

console.log(typeof null);   // 'object'

引用知乎一位大牛的一句话:

JS类型值是存在32 BIT 单元里,32位有1-3位表示类型标记位(TYPE TAG),其它位表示真实值。

而表示object的类型标记位(TYPE TAG)正好是低三位都是0
000: object. The data is a reference to an object.

而js里的null 是机器码NULL空指针, (0x00 is most platforms).所以空指针引用 > 加上 对象标记还是0,最终体现的类型还是object。

null是让一个存放对象类型的引用不指向任何对象(没有对象),而null本身不是一个对象

分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

相关文章

  • 2017-05-11基于JavaScript实现复选框的全选和取消全选
  • 2017-05-11利用Mongoose让JSON数据直接插入或更新到MongoDB
  • 2017-05-11jQuery弹出层插件popShow(改进版)用法示例
  • 2017-05-11Vue2.0表单校验组件vee-validate的使用详解
  • 2017-08-24Ext常用知识点积累--textfield,store,grid
  • 2017-05-11jQuery实现单击按钮遮罩弹出对话框效果(2)
  • 2017-05-11详解数组Array.sort()排序的方法
  • 2017-05-11使用vue.js实现checkbox的全选和多个的删除功能
  • 2017-05-11JS实现AES加密并与PHP互通的方法分析
  • 2017-05-11微信小程序--onShareAppMessage分享参数用处(页面分享)

文章分类

  • JavaScript
  • ASP.NET
  • PHP
  • 正则表达式
  • AJAX
  • JSP
  • ASP
  • Flex
  • XML
  • 编程技巧
  • Android
  • swift
  • C#教程
  • vb
  • vb.net
  • C语言
  • Java
  • Delphi
  • 易语言
  • vc/mfc
  • 嵌入式开发
  • 游戏开发
  • ios
  • 编程问答
  • 汇编语言
  • 微信小程序
  • 数据结构
  • OpenGL
  • 架构设计
  • qt
  • 微信公众号

最近更新的内容

    • 正则验证小数点后面只能有两位数的方法
    • xmlplus组件设计系列之分隔框(DividedBox)(8)
    • vue2 如何实现div contenteditable=“true”(类似于v-model)的效果
    • BootStrap便签页的简单应用
    • node.js学习
    • 利用js的闭包原理做对象封装及调用方法
    • JS判断指定dom元素是否在屏幕内的方法实例
    • 详解vue-Resource(与后端数据交互)
    • 微信小程序 常用工具类详解及实例
    • Bootstrap入门教程一Hello Bootstrap初识

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有