当前位置: 首页 > news >正文

JS编程建议——6:正确处理JavaScript特殊值(2)

建议6:正确处理JavaScript特殊值(2)
与null不同,undefined不是JavaScript的保留字,在ECMAScript v3标准中才定义undefined为全局变量,初始值为undefined。因此,在使用undefined值时就存在一个兼容问题(早期浏览器可能不支持undefined)。除了直接赋值和使用typeof运算符外,其他任何运算符对undefined的操作都会引发异常。不过,可以声明undefined变量,然后查看它的值,如果它的值为undefined,则说明浏览器支持undefined值。例如:

  1. var undefined;
  2. alert(undefined);
    如果浏览器不支持undefined关键字,可以自定义undefined变量,并将其赋值为undefined。例如:
  3. var undefined = void null;
    声明变量为undefined,将其初始化为表达式void null的值,由于运算符void在执行其后的表达式时会忽略表达式的结果值,而总是返回值undefined,因此利用这种方法可以定义一个变量为undefined,并将其赋值为undefined。既然是将变量undefined赋值为undefined,还可以使用如下方式:
  4. var undefined = void 1;
    或者使用没有返回值的函数:
  5. var undefined = function(){}();
  6. alert(undefined); //"undefined"
    可以使用typeof运算符来检测某个变量的值是否为undefined:
  7. var a;
  8. if(typeof a == "undefined"){
  9. }
    3.使用假值

JavaScript的类型系统是非常混乱的,类型特性不明显,而且交叉错乱。JavaScript语法系统拥有一大组假值,如以下代码所示。这些值的布尔值都是false。

  1. 0 //Number
  2. NaN //Number
  3. '' //String
  4. false //Boolean
  5. null //Object
  6. undefined //Undefined
    这些值全部都等同于false,但它们是不可互换的。例如,下面用法是错误的。
  7. value = myObject[name];
  8. if(value == null) {
  9. }
    这是在用一种错误的方式去确定一个对象是否缺少一个成员属性。undefined是缺失的成员属性值,而上面代码片段用null来测试,使用了会强制类型转换的==运算符,而不是更可靠的===运算符。正确的用法如下:
  10. value = myObject[name];
  11. if(!value) {
  12. }
    undefined和NaN并不是常见,它们是全局变量,还可以改变它们的值,虽然在程序设计中不应该采取这种做法,但可以改变它们的值。

相关文章:

  • 利用jQuery选择将被操作的元素
  • parted命令分区
  • 用python怎样实现接口测试
  • JSP语法1
  • iOS 画板 涂鸦 答题
  • poj 1475 Pushing Boxes
  • 初识 ActivityLifecycleCallbacks
  • Zim - 普通人的Org-mode
  • 带参数存储过程的小例子
  • NSLog输出对象
  • 需要Review的题目:
  • lame的ios 静态库创建shell
  • 浅谈设计模式在iOS开发实战项目中的应用
  • string的Equels问题小记
  • JS创建函数:函数声明和函数表达式
  • Bytom交易说明(账户管理模式)
  • canvas 高仿 Apple Watch 表盘
  • php中curl和soap方式请求服务超时问题
  • Redash本地开发环境搭建
  • Redis学习笔记 - pipline(流水线、管道)
  • SpiderData 2019年2月23日 DApp数据排行榜
  • 产品三维模型在线预览
  • 复习Javascript专题(四):js中的深浅拷贝
  • 深入 Nginx 之配置篇
  • 一个完整Java Web项目背后的密码
  • 扩展资源服务器解决oauth2 性能瓶颈
  • "无招胜有招"nbsp;史上最全的互…
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #微信小程序:微信小程序常见的配置传旨
  • (14)目标检测_SSD训练代码基于pytorch搭建代码
  • (C++17) optional的使用
  • (echarts)echarts使用时重新加载数据之前的数据存留在图上的问题
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (SpringBoot)第七章:SpringBoot日志文件
  • (二十三)Flask之高频面试点
  • (分布式缓存)Redis持久化
  • (附源码)spring boot公选课在线选课系统 毕业设计 142011
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (十三)Maven插件解析运行机制
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (转)Oracle存储过程编写经验和优化措施
  • (转)scrum常见工具列表
  • .gitignore文件_Git:.gitignore
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET/C# 利用 Walterlv.WeakEvents 高性能地定义和使用弱事件
  • .net反混淆脱壳工具de4dot的使用
  • .net和jar包windows服务部署
  • .NET教程 - 字符串 编码 正则表达式(String Encoding Regular Express)
  • .NET上SQLite的连接
  • .Net转Java自学之路—基础巩固篇十三(集合)
  • /deep/和 >>>以及 ::v-deep 三者的区别
  • @entity 不限字节长度的类型_一文读懂Redis常见对象类型的底层数据结构
  • [202209]mysql8.0 双主集群搭建 亲测可用