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 键盘keyCode键码值表
Dec 24 Javascript
JQuery Tab选项卡效果代码改进版
Apr 01 Javascript
javascript event 事件解析
Jan 31 Javascript
jquery uaMatch源代码
Feb 14 Javascript
JS网页图片按比例自适应缩放实现方法
Jan 15 Javascript
javascript创建createXmlHttpRequest对象示例代码
Feb 10 Javascript
JavaScript数组深拷贝和浅拷贝的两种方法
Apr 16 Javascript
jquery 为a标签绑定click事件示例代码
Jun 23 Javascript
如何实现JavaScript动态加载CSS和JS文件
Dec 28 Javascript
JS中常用的正则表达式
Sep 29 Javascript
js中数组插入、删除元素操作的方法
Feb 15 Javascript
javascript 玩转Date对象(实例讲解)
Jul 11 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实现的获取URL信息的类
2007/01/02 PHP
PDO预处理语句PDOStatement对象使用总结
2014/11/20 PHP
php查询whois信息的方法
2015/06/08 PHP
yii2.0实现验证用户名与邮箱功能
2015/12/22 PHP
PHP魔术方法使用方法汇总
2016/02/14 PHP
PHP架构及原理知识点详解
2019/12/22 PHP
JavaScript 事件查询综合
2009/07/13 Javascript
jquery实现的超出屏幕时把固定层变为定位层的代码
2010/02/23 Javascript
JS 跳转页面延迟2种方法
2013/03/29 Javascript
javascript验证只能输入数字和一个小数点示例
2013/10/21 Javascript
javascript中字符串的定义示例代码
2013/12/19 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
js简单的点击返回顶部效果实现方法
2015/04/10 Javascript
js自定义回调函数
2015/12/13 Javascript
js实现hashtable的赋值、取值、遍历操作实例详解
2016/12/25 Javascript
使用vue-cli(vue脚手架)快速搭建项目的方法
2018/05/21 Javascript
koa上传excel文件并解析的实现方法
2018/08/09 Javascript
vue页面切换过渡transition效果
2018/10/08 Javascript
vant IndexBar实现的城市列表的示例代码
2019/11/20 Javascript
用pywin32实现windows模拟鼠标及键盘动作
2014/04/22 Python
python打开url并按指定块读取网页内容的方法
2015/04/29 Python
python清除指定目录内所有文件中script的方法
2015/06/30 Python
Python基于property实现类的特性操作示例
2018/06/15 Python
Python使用jsonpath-rw模块处理Json对象操作示例
2018/07/31 Python
Python函数默认参数常见问题及解决方案
2020/03/26 Python
Django与pyecharts结合的实例代码
2020/05/13 Python
520使用Python实现“我爱你”表白
2020/05/20 Python
python -v 报错问题的解决方法
2020/09/15 Python
详解Python 中的 defaultdict 数据类型
2021/02/22 Python
如何避免常见的6种HTML5错误用法
2017/11/06 HTML / CSS
佛罗里达州印第安河新鲜水果:Hale Groves
2017/02/20 全球购物
美国非常受欢迎的Spa品牌:Bliss必列斯
2018/04/10 全球购物
群众路线教育党员自我剖析材料
2014/10/06 职场文书
精神文明建设先进个人事迹材料
2014/12/24 职场文书
2015年检验员工作总结范文
2015/04/30 职场文书
践行三严三实心得体会(2016推荐篇)
2016/01/06 职场文书