位置: 编程技术 - 正文

跟我学习javascript的undefined与null(java script课程)

编辑:rootadmin

推荐整理分享跟我学习javascript的undefined与null(java script课程),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:java script教程,java script入门,java script,java script,java script怎么学,java教程,java learning,java script怎么学,内容如对您有帮助,希望把文章链接给更多的朋友!

当讨论JavaScript中的原始数据类型时,大多数人都知道从String、Number到Boolean的基本知识。这些原始类型相当简单,行为符合常识。但是,本文将更多关注独特的原始数据类型Null和Undefined,是什么让它们如此相似,却又似是而非。

一、理解null和undefined

在JavaScript中,null是字面量同时也是语言中的关键字,用来表示无法识别的对象值。换句话说,这用来表示“无值(no value)”,但你可以决定什么时候得到期望值。

虽然相似,undefined实际上代表了不存在的值(non-existence of a value),也即你有东西丢失了。两者都是完全不可变的,没有属性和方法,也不能给其属性赋值。事实上, 当你试图访问或定义null 与 undefined的一个属性将会引发一个类型错误(TypeError)。

没有值代表的布尔值是false,这意味着他们在条件上下文中会被被计算为false,如if语句。使用相等操作符(= =)比较这两个值和其他false值,他们并不等于除了自己:

尽管如此,和其他相似之处,但null和undefined并不是等价的。每个作为其独特的类型的唯一成员,undefined是Undefined类型和null是Object类型。使用全等操作符(===)比较这两个值,这要求类型和值都相等,下面证明这一点:

上面说明:null 这是一个对象,但是为空。而且 null 是 JavaScript 保留关键字。另外null 参与数值运算时其值会自动转换为 0 ,因此,下列表达式计算后会得到正确的数值:

undefined是全局对象(window)的一个特殊属性,其值是未定义的。但 typeof undefined 返回 ‘undefined' 。 虽然undefined是有特殊含义的,但它确实是一个属性,而且是全局对象(window)的属性。请看下面的代码:

从中可以看出,undefined是window对象的一个属性,但却不是anObj对象的一个属性。 注意:

尽管undefined是有特殊含义的属性,但却不是JavaScript的保留关键字。 undefined参与任何数值计算时,其结果一定是NaN。 随便说一下,NaN是全局对象(window)的另一个特殊属性,Infinity也是。这些特殊属性都不是JavaScript的保留关键字! 验证一个值或者一个对象为null时,需要用“===” 来判定,若只用“==”,则无法判定是null 还是 undefined.

二、产生Undefined情况有许多的方法产生一个undefined值的代码。它通常遇到当试图访问一个不存在的值时。在这种情况下,在JavaScript这种动态的弱类型语言中,只会默认返回一个undefined值,而不是上升为一个错误。

1、任何声明变量时没有提供一个初始值,都会有一个为undefined的默认值:

跟我学习javascript的undefined与null(java script课程)

2、当试图访问一个不存在的对象属性或数组项时,返回一个undefined值:

3、如果省略了函数的返回语句, 或者return语句未带任何参数返回undefined:

4、调用函数时,应该提供的参数没有提供,该参数等于undefined

最后,undefined是一个预定义的全局变量(不像null关键字)初始化为undefined值:

ECMAScript 5中,这个变量是只读的,以前并非如此。

三、null的用例

null的用例是使他与众不同的主要方面,因为不像undefined,null被认为是更有用。这正是为什么typeof操作符作用于null值 时返回“object”。最初的理由是,现在仍然是,通常用作一个空引用一个空对象的预期,就像一个占位符。typeof的这种行为已经被确认为一个错 误,虽然提出了修正,出于后兼容的目的,这一点已经保持不变。

一般来说,如果你需要给一个变量或属性指定一个不变值,将它传递给一个函数,或者从一个函数返回null,null几乎总是最好的选择。简而言之,JavaScript使用undefined并且程序员应该使用null。

null的另一个可行的用例,也被认为是良好的实践是一个显式指定变量为无效(object= null)当一个引用不再是必需的。通过分配null值,有效地清除引用,并假设对象没有引用其他代码,指定垃圾收集,确保回收内存。

四、提高undefined性能

当我们在程序中使用undefined值时,实际上使用的是window对象的undefined属性。 同样,当我们定义一个变量但未赋予其初始值,例如:

这时,JavaScript在所谓的预编译时会将其初始值设置为对window.undefined属性的引用, 于是,当我们将一个变量或值与undefined比较时,实际上是与window对象的undefined属性比较。这个比较过程中,JavaScript会搜索window对象名叫‘undefined'的属性,然后再比较两个操作数的引用指针是否相同。

由于window对象的属性值是非常多的,在每一次与undefined的比较中,搜索window对象的undefined属性都会花费时 间。在需要频繁与undefined进行比较的函数中,这可能会是一个性能问题点。因此,在这种情况下,我们可以自行定义一个局部的undefined变 量,来加快对undefined的比较速度。例如:

其中,定义undefined局部变量时,其初始值会是对window.undefined属性值的引用。新定义的局部undefined变 量存在与该函数的作用域上。在随后的比较操作中,JavaScript代码的书写方式没有任何的改变,但比较速度却很快。因为作用域上的变量数量会远远少 于window对象的属性,搜索变量的速度会极大提高。

这就是许多前端JS框架为什么常常要自己定义一个局部undefined变量的原因!

标签: java script课程

本文链接地址:https://www.jiuchutong.com/biancheng/384627.html 转载请保留说明!

上一篇:跟我学习javascript的arguments对象(java script教程)

下一篇:JavaScript代码实现禁止右键、禁选择、禁粘贴、禁shift、禁ctrl、禁alt(javascript 代码)

  • 资产交换的涉税处理
  • 收到投资土地使用权的会计科目
  • 计提年终奖可以冲减利润
  • 分公司可以独立签约吗
  • 营业外收入怎么结转到本年利润
  • 纳税人选择简易办法一经选择
  • 劳务派遣公司收取劳务费应开具什么票
  • 员工参加公司活动的好处
  • 固定资产出售增值税税率
  • 股权稀释需要交税吗
  • 汇兑损益在外币业务核算中有什么重要意义
  • 固定资产月底怎么处理
  • 企业股权设计咨询这个行业怎么样
  • 货物损失怎么处理
  • 上月预付款项 这月开了发票会计分录
  • 物业公司减免物业费怎样开票
  • 管网设计费用取费标准
  • 小规模纳税人如何计算增值税
  • 专票开票信息不填省份可以吗
  • 资产负债表里的年初余额是什么意思
  • 负数到正数的增减
  • 筹建期间所得税
  • 滴滴发票开公司名称可以抵扣进项吗
  • 收到财政局专项审计短信
  • 个人所得税计算方法及抵扣方法
  • 企业并购效益
  • 坏账损失的确定原则
  • 非营利组织一般纳税人会计准则
  • 增值税价外费用如何开票
  • 公司为员工发放生日福利
  • 无线路由器怎么连接
  • 报销没有发票如何处理做凭证
  • 运输企业成本核算内容有哪些?
  • 退税的项目有哪些
  • 损益类科目包括利润分配吗
  • php 表单
  • 公司交纳社会保险多少钱
  • 注意力机制有什么作用
  • Diffusion models代码实战:从零搭建自己的扩散模型
  • 利润的调增和调减
  • 利息收入包括
  • 固定资产的特征有哪些
  • 事业结余是事业单位当年全部收支相抵后的余额
  • 非限定性净资产包括哪些科目
  • phpcms是什么
  • mysql版本5.5.x升级到5.6.x步骤分享
  • python gitpython
  • 出租车票可以查到行程吗
  • 固定资产的入账金额怎么算
  • 如何界定人力资源管理
  • 房产公司结转成本的会计分录
  • 职工教育经费还有什么经费
  • 经营租赁属于什么收入
  • 上月未记账,本月同样可以记账
  • 自产的产品用于管理部门
  • 付给第三方的差额是什么
  • 收到投资款现金流量放到哪里
  • 企业所得税留抵税额
  • 计提工资的会计处理
  • 公司社保委托代发银行是工资卡银行吗
  • 工程款发票开给委托方要如何处理?
  • 工程未竣工预付款怎么办
  • etc 电子票
  • 采购库存商品的分录
  • 销售佣金的会计科目
  • 企业进行长期投资的意义
  • 两台电脑如何共享网络
  • centos6.10内核版本
  • smOutlookPack.exe - smOutlookPack是什么进程 什么文件
  • 日历显示不全
  • 怎么判断进程是否存在
  • 如何设置打开wincc不弹出项目管理
  • nodejs抓取网页内容
  • cmd for /f
  • 批处理禁用计算机
  • JavaScript基础语法详解
  • 换电脑了税控盘怎么办
  • 水上公安分局
  • 滞留票税务局会罚款多少
  • 公司注销时注册资金未缴完
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设