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 相关文章推荐
JavaScript 替换Html标签实现代码
Oct 14 Javascript
window.open关于浏览器拦截问题分析及解决方法
Feb 05 Javascript
让alert不出现弹窗的两种方法
May 18 Javascript
JQuery 控制内容长度超出规定长度显示省略号
May 23 Javascript
简介JavaScript中的sub()方法的使用
Jun 08 Javascript
js精美的幻灯片画集特效代码分享
Aug 29 Javascript
微信小程序 swiper组件轮播图详解及实例
Nov 16 Javascript
详解Node.js中exports和module.exports的区别
Apr 19 Javascript
bootstrap fileinput插件实现预览上传照片功能
Jan 23 Javascript
JavaScript代码实现txt文件的上传预览功能
Mar 27 Javascript
jQuery实现为动态添加的元素绑定事件实例分析
Sep 07 jQuery
js canvas实现二维码和图片合成的海报
Nov 19 Javascript
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生成QRcode实例
2014/09/22 PHP
在Windows系统下使用PHP生成Word文档的教程
2015/07/03 PHP
PHP7 新特性详细介绍
2016/09/06 PHP
thinkPHP实现的省市区三级联动功能示例
2017/05/05 PHP
PHP中cookie知识点学习
2018/05/06 PHP
js 判断 enter 事件
2009/02/12 Javascript
用html+css+js实现的一个简单的图片切换特效
2014/05/28 Javascript
常用的JS验证和函数汇总
2014/12/23 Javascript
javascript与css3动画结合使用小结
2015/03/11 Javascript
JavaScript中的定时器之Item23的合理使用
2015/10/30 Javascript
BootStrap组件之进度条的基本用法
2017/01/19 Javascript
Vue2 使用 Echarts 创建图表实例代码
2017/05/18 Javascript
使用jQuery.Pin垂直滚动时固定导航
2017/05/24 jQuery
浅谈JS获取元素的N种方法及其动静态讨论
2017/08/25 Javascript
关于Promise 异步编程的实例讲解
2017/09/01 Javascript
JavaScript数组基于交换的排序示例【冒泡排序】
2018/07/21 Javascript
移动端底部导航固定配合vue-router实现组件切换功能
2019/06/13 Javascript
微信小程序开发之map地图组件定位并手动修改位置偏差
2019/08/17 Javascript
详解Vue2的diff算法
2021/01/06 Vue.js
Python中unittest用法实例
2014/09/25 Python
Django后台获取前端post上传的文件方法
2018/05/28 Python
使用Python机器学习降低静态日志噪声
2018/09/29 Python
Django中的cookie和session
2019/08/27 Python
python 操作mysql数据中fetchone()和fetchall()方式
2020/05/15 Python
浅谈Django前端后端值传递问题
2020/07/15 Python
一篇文章教你用python画动态爱心表白
2020/11/22 Python
Pat McGrath Labs官网:世界上最有影响力的化妆师推出的彩妆品牌
2018/01/07 全球购物
萨克斯第五大道英国:Saks Fifth Avenue英国
2019/04/01 全球购物
德国W家官网,可直邮中国的母婴商城:Windeln.de
2021/03/03 全球购物
SQL Server面试题
2016/10/17 面试题
JPA的优势都有哪些
2013/07/04 面试题
给海归自荐信的建议
2013/12/13 职场文书
个人学习群众路线心得体会
2014/11/05 职场文书
军事博物馆观后感
2015/06/05 职场文书
《我要的是葫芦》教学反思
2016/02/18 职场文书
关于Python使用turtle库画任意图的问题
2022/04/01 Python