JavaScript标准对象_动力节点Java学院整理


Posted in Javascript onJune 27, 2017

在JavaScript的世界里,一切都是对象。

但是某些对象还是和其他对象不太一样。为了区分对象的类型,我们用typeof操作符获取对象的类型,它总是返回一个字符串:

typeof 123; // 'number'
typeof NaN; // 'number'
typeof 'str'; // 'string'
typeof true; // 'boolean'
typeof undefined; // 'undefined'
typeof Math.abs; // 'function'
typeof null; // 'object'
typeof []; // 'object'
typeof {}; // 'object'

可见,number、string、boolean、functionundefined有别于其他类型。特别注意null的类型是object,Array的类型也是object,如果我们用typeof将无法区分出null、Array和通常意义上的object——{}。

包装对象

除了这些类型外,JavaScript还提供了包装对象,熟悉Java的小伙伴肯定很清楚int和Integer这种暧昧关系。
number、boolean和string都有包装对象。没错,在JavaScript中,字符串也区分string类型和它的包装类型。包装对象用new创建:

var n = new Number(123); // 123,生成了新的包装类型
var b = new Boolean(true); // true,生成了新的包装类型
var s = new String('str'); // 'str',生成了新的包装类型

虽然包装对象看上去和原来的值一模一样,显示出来也是一模一样,但他们的类型已经变为object了!所以,包装对象和原始值用===比较会返回false:

typeof new Number(123); // 'object'
new Number(123) === 123; // false

typeof new Boolean(true); // 'object'
new Boolean(true) === true; // false

typeof new String('str'); // 'object'
new String('str') === 'str'; // false

所以闲的蛋疼也不要使用包装对象!尤其是针对string类型!!!
如果我们在使用Number、BooleanString时,没有写new会发生什么情况?
此时,Number()、BooleanString()被当做普通函数,把任何类型的数据转换为number、booleanstring类型(注意不是其包装类型):

var n = Number('123'); // 123,相当于parseInt()或parseFloat()
typeof n; // 'number'

var b = Boolean('true'); // true
typeof b; // 'boolean'

var b2 = Boolean('false'); // true! 'false'字符串转换结果为true!因为它是非空字符串!
var b3 = Boolean(''); // false

var s = String(123.45); // '123.45'
typeof s; // 'string'

是不是感觉头大了?这就是JavaScript特有的催眠魅力!

总结一下,有这么几条规则需要遵守:

  • 不要使用new Number()、new Boolean()、new String()创建包装对象;
  • 用parseInt()parseFloat()来转换任意类型到number
  • 用String()来转换任意类型到string,或者直接调用某个对象的toString()方法;
  • 通常不必把任意类型转换为boolean再判断,因为可以直接写if (myVar) {...};
  • typeof操作符可以判断出number、boolean、string、function和undefined
  • 判断Array要使用Array.isArray(arr);
  • 判断null请使用myVar === null
  • 判断某个全局变量是否存在用typeof window.myVar === 'undefined';
  • 函数内部判断某个变量是否存在用typeof myVar === 'undefined'。

最后有细心的同学指出,任何对象都有toString()方法吗?nullundefined就没有!确实如此,这两个特殊值要除外,虽然null还伪装成了object类型。

更细心的同学指出,number对象调用toString()报SyntaxError:

123.toString(); // SyntaxError

遇到这种情况,要特殊处理一下:

123..toString(); // '123', 注意是两个点!
(123).toString(); // '123'

不要问为什么,这就是JavaScript代码的乐趣!

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
jQuery学习3:操作元素属性和特性
Feb 07 Javascript
浅析jQuery的链式调用之each函数
Dec 03 Javascript
基于javascript滚动图片具体实现
Nov 18 Javascript
Bootstrap入门书籍之(五)导航条、分页导航
Feb 17 Javascript
Node.js+ES6+dropload.js实现移动端下拉加载实例
Jun 01 Javascript
Vue中保存用户登录状态实例代码
Jun 07 Javascript
Node.js npm命令运行node.js脚本的方法
Oct 10 Javascript
jQuery zTree插件快速实现目录树
Aug 16 jQuery
Vue父组件向子组件传值以及data和props的区别详解
Mar 02 Javascript
Javascript原型链及instanceof原理详解
May 25 Javascript
使用JavaScript实现贪吃蛇游戏
Sep 29 Javascript
Vue $attrs & inheritAttr实现button禁用效果案例
Dec 07 Vue.js
JavaScript闭包_动力节点Java学院整理
Jun 27 #Javascript
JavaScript创建对象_动力节点Java学院整理
Jun 27 #Javascript
JavaScript字符串_动力节点Java学院整理
Jun 27 #Javascript
JavaScript变量作用域_动力节点Java学院整理
Jun 27 #Javascript
详解微信小程序 登录获取unionid
Jun 27 #Javascript
JavaScript定义函数_动力节点Java学院整理
Jun 27 #Javascript
详解vue项目构建与实战
Jun 27 #Javascript
You might like
php利用header函数实现文件下载时直接提示保存
2009/11/12 PHP
PHP把网页保存为word文件的三种方法
2014/04/01 PHP
深入浅析PHP7.0新特征(五大新特征)
2015/10/29 PHP
PHP5.5迭代生成器用法实例详解
2016/03/16 PHP
PHP获取中国时间(上海时区时间)及美国时间的方法
2017/02/23 PHP
详解PHP字符串替换str_replace()函数四种用法
2017/10/13 PHP
深入理解JavaScript系列(16) 闭包(Closures)
2012/04/12 Javascript
firefox下jquery iframe刷新页面提示会导致重复之前动作
2012/12/17 Javascript
简单漂亮的js弹窗可自由拖拽且兼容大部分浏览器
2013/10/22 Javascript
JS实现表格数据各种搜索功能的方法
2015/03/03 Javascript
Css3制作变形与动画效果
2015/07/24 Javascript
第一次接触神奇的Bootstrap表单
2016/07/27 Javascript
微信小程序 Audio API详解及实例代码
2016/09/30 Javascript
vue 弹框产生的滚动穿透问题的解决
2018/09/21 Javascript
element-ui upload组件多文件上传的示例代码
2018/10/17 Javascript
Three.js实现3D机房效果
2018/12/30 Javascript
JS实现将对象转化为数组的方法分析
2019/01/21 Javascript
vue-cli的build的文件夹下没有dev-server.js文件配置mock数据的方法
2019/04/17 Javascript
微信小程序以ssm做后台开发的实现示例
2020/04/08 Javascript
Python线程中对join方法的运用的教程
2015/04/09 Python
Python3读取UTF-8文件及统计文件行数的方法
2015/05/22 Python
Python中的引用知识点总结
2019/05/20 Python
Python3自定义http/https请求拦截mitmproxy脚本实例
2020/05/11 Python
html5画布旋转效果示例
2014/01/27 HTML / CSS
英国时尚泳装品牌:Maru Swimwear
2019/10/06 全球购物
电子商务应届生求职信
2013/11/16 职场文书
优秀毕业生求职信范文
2014/01/02 职场文书
校三好学生主要事迹
2014/01/11 职场文书
高中语文课后反思
2014/04/27 职场文书
爱国演讲稿400字
2014/05/07 职场文书
医院领导班子查摆问题对照检查材料思想汇报
2014/10/08 职场文书
新闻报道稿范文
2015/07/23 职场文书
感恩教师主题班会
2015/08/12 职场文书
Python 高级库15 个让新手爱不释手(推荐)
2021/05/15 Python
nginx结合openssl实现https的方法
2021/07/25 Servers
【海涛七七解说】DCG第二周:DK VS 天禄
2022/04/01 DOTA