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 字符 Escape,encodeURI,encodeURIComponent
Jul 09 Javascript
javascript 表单验证常见正则
Sep 28 Javascript
javascript代码编写需要注意的7个小细节小结
Sep 21 Javascript
通过js动态操作table(新增,删除相关列信息)
May 23 Javascript
php对mongodb的扩展(初识如故)
Nov 11 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
Sep 15 Javascript
JavaScript包装对象使用详解
Jul 09 Javascript
深入理解逻辑表达式的用法 与或非的用法
Jun 06 Javascript
JavaScript操作 url 中 search 部分方法函数
Jun 15 Javascript
AngularJS实现Input格式化的方法
Nov 07 Javascript
JQuery异步提交表单与文件上传功能示例
Jan 12 Javascript
qrcode生成二维码微信长按无法识别问题的解决
Apr 04 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
什么是短波收听SWL
2021/03/01 无线电
晶体管来复再生式二管收音机
2021/03/02 无线电
php+iframe实现隐藏无刷新上传文件
2012/02/10 PHP
ecshop实现smtp发送邮件
2015/02/03 PHP
PHP经典面试题集锦
2015/03/19 PHP
php+jQuery+Ajax实现点赞效果的方法(附源码下载)
2020/07/21 PHP
thinkphp3.2.0 setInc方法 源码全面解析
2018/01/29 PHP
PHP实现生成数据字典功能示例
2018/05/24 PHP
浅谈PHP中的Trait使用方法
2019/03/22 PHP
JQERY limittext 插件0.2版(长内容限制显示)
2010/08/27 Javascript
学习JavaScript的最佳方法分享
2011/10/21 Javascript
JS对象转换为Jquery对象示例
2014/01/26 Javascript
JS运动框架之分享侧边栏动画实例
2015/03/03 Javascript
JavaScript原生对象之Number对象的属性和方法详解
2015/03/13 Javascript
JS动态修改表格cellPadding和cellSpacing的方法
2015/03/31 Javascript
使用JQuery实现智能表单验证功能
2016/03/08 Javascript
dedecms页面如何获取会员状态的实例代码
2016/03/15 Javascript
jQuery基础的工厂函数以及定时器的经典实例分析
2016/05/20 Javascript
javascript验证香港身份证的格式或真实性
2017/02/07 Javascript
vue.js单文件组件中非父子组件的传值实例
2018/09/13 Javascript
Vue中keep-alive的两种应用方式
2020/07/15 Javascript
理解JavaScript中的对象
2020/08/25 Javascript
vue使用echarts图表自适应的几种解决方案
2020/12/04 Vue.js
Python中取整的几种方法小结
2017/01/06 Python
详解如何用OpenCV + Python 实现人脸识别
2017/10/20 Python
Vue的el-scrollbar实现自定义滚动
2018/05/29 Python
python3学习之Splash的安装与实例教程
2018/07/09 Python
python统计字符串中字母出现次数代码实例
2020/03/02 Python
域名注册、建站工具、网页主机、SSL证书:Dynadot
2017/01/06 全球购物
ghd澳大利亚官方网站:英国最受欢迎的美发工具品牌
2018/05/21 全球购物
Bibloo匈牙利:女装、男装、童装及鞋子和配饰
2019/04/14 全球购物
英国休闲奢华的缩影:Crew Clothing
2019/05/05 全球购物
工程班组长岗位职责
2013/12/30 职场文书
公务员年终个人总结
2015/02/12 职场文书
2015年度培训工作总结范文
2015/04/02 职场文书
MySQL系列之五 视图、存储函数、存储过程、触发器
2021/07/02 MySQL