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 装载iframe子页面,自适应高度
Mar 20 Javascript
JavaScript中的匀速运动和变速(缓冲)运动详细介绍
Nov 11 Javascript
一个级联菜单代码学习及removeClass与addClass的应用
Jan 24 Javascript
onkeyup,onkeydown和onkeypress的区别介绍
Oct 21 Javascript
jquery创建表格(自动增加表格)代码分享
Dec 25 Javascript
jQuery实现在下拉列表选择时获取json数据的方法
Apr 16 Javascript
JS组件中bootstrap multiselect两大组件较量
Jan 26 Javascript
使用do...while的方法输入一个月中所有的周日(实例代码)
Jul 22 Javascript
AngularJS实现的输入框字数限制提醒功能示例
Oct 26 Javascript
Vue.js暴露方法给WebView的使用操作
Sep 07 Javascript
vue中实现点击变成全屏的多种方法
Sep 27 Javascript
vue项目多环境配置(.env)的实现
Jul 21 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脚本的10个技巧(3)
2006/10/09 PHP
php执行sql语句的写法
2009/03/10 PHP
PHP 正则表达式常用函数
2014/08/17 PHP
php+mysql实现数据库随机重排实例
2014/10/17 PHP
服务器上配置PHP运行环境教程
2015/02/12 PHP
PHP单例模式是什么 php实现单例模式的方法
2016/05/14 PHP
PHP面相对象中的重载与重写
2017/02/13 PHP
PHP cURL获取微信公众号access_token的实例
2018/04/28 PHP
Jquery Uploadify多文件上传带进度条且传递自己的参数
2013/08/28 Javascript
javascript history对象(历史记录)使用方法(实现浏览器前进后退)
2014/01/07 Javascript
jQuery产品间断向下滚动效果核心代码
2014/05/08 Javascript
用javascript实现自动输出网页文本
2015/07/30 Javascript
jQuery实现鼠标经过事件的延时处理效果
2020/08/20 Javascript
JavaScript中的Number数字类型学习笔记
2016/05/26 Javascript
js 监控iframe URL的变化实例代码
2017/07/12 Javascript
使用vue制作FullPage页面滚动效果
2017/08/21 Javascript
Vue插件打包与发布的方法示例
2018/08/20 Javascript
微信小程序实现按字母排列选择城市功能
2019/11/25 Javascript
[06:43]DAC2018 4.5 SOLO赛 Maybe vs Paparazi
2018/04/06 DOTA
Python实现数据库编程方法详解
2015/06/09 Python
Python3 jupyter notebook 服务器搭建过程
2018/11/30 Python
浅谈python脚本设置运行参数的方法
2018/12/03 Python
Python+opencv 实现图片文字的分割的方法示例
2019/07/04 Python
Python占用的内存优化教程
2019/07/28 Python
Python实现SMTP邮件发送
2020/06/16 Python
深入了解Python 方法之类方法 & 静态方法
2020/08/17 Python
意大利简约的休闲品牌:Aspesi
2018/02/08 全球购物
澳大利亚婴儿喂养品牌:Cherub Baby
2018/11/01 全球购物
澳大利亚网上买书:Angus & Robertson
2019/07/21 全球购物
应聘收银员个人的求职信
2013/11/30 职场文书
毕业生的自我鉴定该怎么写
2013/12/02 职场文书
弘扬职业精神演讲稿
2014/03/20 职场文书
货物运输服务质量承诺书
2014/05/29 职场文书
求职信范文怎么写
2015/03/19 职场文书
2016年政治理论学习心得体会
2016/01/25 职场文书
《勇者辞职不干了》ED主题曲无字幕动画MV公开
2022/04/13 日漫