JS 基本类型的包装对象
笔记整理自:廖雪峰老师的JS教程
包装对象
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类型!!!
不写new的作用
如果我们在使用Number、Boolean和String时,没有写new会发生什么情况?
此时,Number()、Boolean和String()被当做普通函数,把任何类型的数据转换为number、boolean和string类型(注意不是其包装类型):
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'
总结
不要使用
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()方法吗?
null和undefined就没有!另外,null还伪装成了object类型。 number对象调用toString()报SyntaxError问题:
123.toString(); // SyntaxError
遇到这种情况,要特殊处理一下:
123..toString(); // '123', 注意是两个点!
(123).toString(); // '123'
												
											JS 基本类型的包装对象的更多相关文章
- js基本类型的包装对象
		
var test = "test"; test.a = "hello"; console.log(test.a); 在JavaScript中,“一切皆对象”,数 ...
 - JS面向对象组件(一) ---包装对象与原型链
		
首先我们可以看看平时我们常用的 var str = 'hello'; alert(typeof str); //string var str = new String("hello" ...
 - js学习笔记之包装对象
		
JavaScript包装对象 近日有时间,闲下来好好学习原生js JavaScript是一门面向对象语言,使用"."就可以访问对象的属性和方法,而基本类型(null, undefi ...
 - js基本类型存放和对象存放的区别(对象遍历)
		
js的基本类型,对象类型的应用在初学的时候,需要自己加以明确,明确了数据类型,在使用过程中才能正确使用变量.如下两个例子是摘自初学时的笔记,为大家提供参考. 1.对象可以存放属性和方法,js基本类型不 ...
 - 一道js题(引用类型、基本类型、包装对象、函数赋值)
		
var a = 1; var obj = { b: 2 }; var fn = function () {}; fn.c = 3; function test(x, y, z) { ...
 - 轻松理解JS基本包装对象
		
今天来讨论一下JS中的基本包装对象(也叫基本包装类型),之前刚学到这里的时候,自己也是一头雾水,不明白这个基本包装对象到底是个什么鬼,后来找了很多资料,终于看清了它的真面目.首先呢,我们现在复习一下J ...
 - js基础学习之-js包装对象
		
var test = "test"; test.a = "hello"; console.log(test.a); //undifined 定义: 在JavaS ...
 - JavaScript 基本包装类型,包装对象
		
前言 javascript对象是一种复合值,它是属性或已命名值的集合.通过'.'符号来引用属性值.当属性值是一个函数时,称其为方法.通过o.m()来调用对象o中的方法.我们发现,字符串也同样具有属性和 ...
 - javascript类型系统——包装对象
		
× 目录 [1]定义 [2]生存期 [3]显式创建[4]转型函数[5]比较运算 前面的话 javascript对象是一种复合值,它是属性或已命名值的集合.通过'.'符号来引用属性值.当属性值是一个函数 ...
 
随机推荐
- uniapp中使用animate.css4.1.1动画库在小程序中不生效解决办法
			
找到源码animate.css修改以下代码 :root { --animate-duration: 1s; --animate-delay: 1s; --animate-repeat: 1; } // ...
 - HTML网页设计基础笔记 • 【第8章 页面布局与规划】
			
全部章节 >>>> 本章目录 8.1 表格布局 8.1.1 表格布局 8.2 流式布局 8.2.1 瀑布流布局 8.2.2 masonry 实现瀑布流布局 8.3 div ...
 - Python中单下划线与双下划线用法总结
			
看mentor的脚本时,遇到self._item.callspec.getparam('')语句,理解起来比较困难,找到一篇文章,记录的比较详细,特别记录一下,以备复习. 附链接地址:http://w ...
 - java POJO中 Integer 和 int 的不同,用int还是用Integer
			
https://www.jianshu.com/p/ff535284916f [int和Integer的区别] int是java提供的8种原始类型之一,java为每个原始类型提供了封装类,Intege ...
 - JS 判断上传文件类型
			
var video_src_file = $("#video_src_file").val(); var fileTypes = new Array("flv" ...
 - react中使用immutable
			
官方文档(https://immutable-js.github.io/immutable-js/docs/#/) 有人说 Immutable 可以给 React 应用带来数十倍的提升,也有人说 Im ...
 - Hive UDF,就这
			
摘要:Hive UDF是什么?有什么用?怎么用?什么原理?本文从UDF使用入手,简要介绍相关源码,UDF从零开始. 本文分享自华为云社区<Hive UDF,就这>,作者:汤忒撒. Hive ...
 - 一站式搭建 GitHub Pages 博客 (一)
			
本文将详细讲解如何快速搭建 GitHub Pages 博客页面 关于博客主题,博客信息更改,上传文章等将会在 一站式搭建 GitHub Pages 博客 (二) 中进行详细讲解 准备阶段 注册 Git ...
 - HTTP2和WebSocket
			
HTTP http是目前应用最广泛的应用层协议,截止到目前为止已经发布了多个版本,最常用的是http1.1和http2. http0.9是最早的版本,功能很简单,没有header,只支持GET. ht ...
 - 【Java】Super
			
Super super用于调用父类的属性.方法.构造器,与this相同. super的使用 属性与方法 在子类的方法或构造器中.通过使用"super.属性"或"super ...