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中的操作符==与===介绍
Dec 31 Javascript
jquery制作属于自己的select自定义样式
Nov 23 Javascript
基于jQuery实现多标签页切换的效果(web前端开发)
Jul 24 Javascript
AngularJS ng-bind 指令简单实现
Jul 30 Javascript
原生js实现商品放大镜效果
Jan 12 Javascript
jquery操作select取值赋值与设置选中实例
Feb 28 Javascript
浅谈Vue 初始化性能优化
Aug 31 Javascript
electron demo项目npm install安装失败的解决方法
Feb 06 Javascript
基于datepicker定义自己的angular时间组件的示例
Mar 14 Javascript
vue-cli3项目展示本地Markdown文件的方法
Jun 07 Javascript
JavaScript undefined及null区别实例解析
Jul 21 Javascript
解决Vue的文本编辑器 vue-quill-editor 小图标样式排布错乱问题
Aug 03 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获取网页标题的3种实现方法代码实例
2014/04/11 PHP
php正则匹配html中带class的div并选取其中内容的方法
2015/01/13 PHP
支持png透明图片的php生成缩略图类分享
2015/02/08 PHP
PHP获取二维数组中某一列的值集合
2015/12/25 PHP
PHP设计模式之工厂模式实例总结
2017/09/01 PHP
Laravel中日期时间处理包Carbon的简单使用
2017/09/21 PHP
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
jQuery应用之jQuery链用法实例
2015/01/19 Javascript
最常用的jQuery表单验证(简单)
2017/05/23 jQuery
详解AngularJS2 Http服务
2017/06/26 Javascript
在Vue中使用echarts的实例代码(3种图)
2017/07/10 Javascript
jQuery常用选择器详解
2017/07/17 jQuery
解决vue打包项目后刷新404的问题
2018/03/06 Javascript
Angular如何在应用初始化时运行代码详解
2018/06/11 Javascript
nodeJs的安装与npm全局环境变量的配置详解
2020/01/06 NodeJs
基于javascript处理二进制图片流过程详解
2020/06/08 Javascript
python实现udp数据报传输的方法
2014/09/26 Python
python中xrange用法分析
2015/04/15 Python
Python原始字符串与Unicode字符串操作符用法实例分析
2017/07/22 Python
人机交互程序 python实现人机对话
2017/11/14 Python
读取json格式为DataFrame(可转为.csv)的实例讲解
2018/06/05 Python
对pycharm代码整体左移和右移缩进快捷键的介绍
2018/07/16 Python
对python制作自己的数据集实例讲解
2018/12/12 Python
keras中的backend.clip用法
2020/05/22 Python
python爬取代理IP并进行有效的IP测试实现
2020/10/09 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
html5 canvas实现圆形时钟代码分享
2013/12/25 HTML / CSS
Html5饼图绘制实现统计图的方法
2020/08/05 HTML / CSS
Amara德国:家居饰品、设计师品牌和豪华礼品
2019/05/20 全球购物
说明书怎么写
2014/05/06 职场文书
财务会计专业求职信
2014/06/09 职场文书
一般基层干部群众路线教育实践活动个人对照检查材料
2014/11/04 职场文书
秦始皇兵马俑导游词
2015/02/02 职场文书
2016年安全生产先进个人事迹材料
2016/02/29 职场文书
优胜劣汰,强者为王——读《鲁滨逊漂流记》有感
2019/08/15 职场文书
如何在CSS中绘制曲线图形及展示动画
2021/05/24 HTML / CSS