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 相关文章推荐
xml文档转换工具,附图表例子(hta)
Nov 17 Javascript
通过jQuery源码学习javascript(三)
Dec 27 Javascript
jquery分页插件AmSetPager(自写)
Apr 15 Javascript
Javascript变量作用域详解
Dec 06 Javascript
通过js为元素添加多项样式,浏览器全兼容写法
Aug 30 Javascript
jQuery中prepend()方法用法实例
Dec 25 Javascript
jQuery使用hide方法隐藏元素自身用法实例
Mar 30 Javascript
支持移动端原生js轮播图
Feb 16 Javascript
基于JavaScript实现的插入排序算法分析
Apr 14 Javascript
Bootstrap弹出框之自定义悬停框标题、内容和样式示例代码
Jul 11 Javascript
VUE重点问题总结
Mar 19 Javascript
Angular使用ControlValueAccessor创建自定义表单控件
Mar 08 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取得一个类的属性和方法的实现代码
2011/05/22 PHP
全面解读PHP的Yii框架中的日志功能
2016/03/17 PHP
Yii框架组件和事件行为管理详解
2016/05/20 PHP
Yii2.0实现生成二维码功能实例
2017/10/24 PHP
Laravel实现批量更新多条数据
2020/04/06 PHP
javascript 事件查询综合 推荐收藏
2010/03/10 Javascript
在IE6下发生Internet Explorer cannot open the Internet site错误
2010/06/21 Javascript
jquery的extend和fn.extend的使用说明
2011/01/09 Javascript
JS getAttribute和setAttribute(取得和设置属性)的使用介绍
2013/07/10 Javascript
jQuery中使用data()方法读取HTML5自定义属性data-*实例
2014/04/11 Javascript
点击表单提交时出现jQuery没有权限的解决方法
2014/07/23 Javascript
javascript arguments使用示例
2014/12/16 Javascript
js实现有时间限制消失的图片方法
2015/02/27 Javascript
原生js编写焦点图效果
2016/12/08 Javascript
Vue.js计算属性computed与watch(5)
2016/12/09 Javascript
bootstrap选项卡使用方法解析
2017/01/11 Javascript
jQuery Ajax实现跨域请求
2017/01/21 Javascript
vue中手机号,邮箱正则验证以及60s发送验证码的实例
2018/03/16 Javascript
vue-cli axios请求方式及跨域处理问题
2018/03/28 Javascript
vue2.0 实现导航守卫(路由守卫)
2018/05/21 Javascript
vue地址栏直接输入路由无效问题的解决
2018/11/15 Javascript
详解vue中v-bind:style效果的自定义指令
2020/01/21 Javascript
php使用递归与迭代实现快速排序示例
2014/01/23 Python
在Django的URLconf中使用多个视图前缀的方法
2015/07/18 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
HTML5之HTML元素扩展(上)—新增加的元素及使用概述
2013/01/31 HTML / CSS
工商管理专业大学生职业生涯规划范文
2014/03/09 职场文书
交警个人先进事迹材料
2014/05/11 职场文书
公务员四风问题对照检查材料整改措施
2014/09/26 职场文书
2014年销售工作总结
2014/12/01 职场文书
慰问信范文
2015/02/14 职场文书
2015年八一建军节演讲稿
2015/03/19 职场文书
管理失职检讨书
2015/05/05 职场文书
劳动仲裁调解书
2015/05/20 职场文书
小学见习报告
2015/06/23 职场文书
深度学习小工程练习之垃圾分类详解
2021/04/14 Python