转自:js 标准对象
在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
、function
和undefined
有别于其他类型。特别注意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
、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'
是不是感觉头大了?这就是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()
方法吗?null
和undefined
就没有!确实如此,这两个特殊值要除外,虽然null
还伪装成了object
类型。
更细心的同学指出,number
对象调用toString()
报SyntaxError:
123.toString(); // SyntaxError
遇到这种情况,要特殊处理一下:
123..toString(); // '123', 注意是两个点!
(123).toString(); // '123'
不要问为什么,这就是JavaScript代码的乐趣!
相关推荐
JavaScript中的标准对象是编程语言的核心组成部分,它们提供了一系列预定义的功能和属性,使得开发者能够更加高效地处理数据和实现各种复杂逻辑。在这个文档中,我们将深入探讨JavaScript中的几个关键标准对象,包括...
JavaScript标准对象是在JavaScript编程语言中预定义的对象,它们是编程语言的一部分,提供了许多常用的工具和接口,使得开发人员能够更便捷地操作数据和执行操作。JavaScript的标准对象涵盖了数据类型的包装对象,...
最后,JavaScript中的Date对象还有一些特殊的日期计算和格式化功能,但此处提到的以上知识点是学习和理解JavaScript标准对象的基础。通过这些内容,开发者能够掌握JavaScript中处理基本数据类型和日期时间的核心概念...
《JavaScript标准参考教程》是一本全面介绍JavaScript编程语言的书籍,其内容涵盖了从基础语法、数据类型、函数到高级特性如数组操作、错误处理、编程风格等各个方面的知识。阮一峰作为作者,将多年的经验和网络资料...
### JavaScript面向对象编程精要 #### 一、引言 JavaScript是一种灵活且强大的脚本语言,它虽然起源于一种简单的浏览器脚本语言,但随着...随着ES6及更高版本标准的引入,JavaScript的面向对象能力得到了进一步增强。
它们与JS的标准对象相对,后者如Date、Array等是由语言内置的。 1.2.2 原型(prototype) 原型是JavaScript中一种特殊的概念,它允许我们在运行时为对象添加新的属性和方法。通过`prototype`,我们可以扩展内置对象...
本地对象(Native Objects)是ECMAScript标准定义的,独立于宿主环境(如浏览器或Node.js环境)的对象。这些对象包括基本类型如`Object`、`Function`、`Array`、`String`、`Boolean`、`Number`、`Date`、`RegExp`,...
JavaScript是一种广泛应用于Web开发的脚本语言,它虽然支持面向对象编程...同时,随着语言的不断发展,诸如类的引入和模块系统的标准化,JavaScript的面向对象编程正变得越来越成熟,为开发者提供了更多的工具和选择。
随着ES6标准的引入,JavaScript正式引入了类(class)的概念,使得其面向对象编程(OOP)更加直观和规范。但在ES6之前,JavaScript早已支持面向对象编程,尽管其方式更为灵活,也更依赖于原型链。 #### 二、使用函数...
总结来说,"js 贪吃蛇(面向对象)"案例提供了学习和实践JavaScript面向对象编程的好机会。通过分析和实现这个案例,开发者可以深入理解面向对象的设计原则,提高代码复用和维护性,同时也能体会到面向对象编程在...
与自定义对象相对应的是JS标准对象,例如Date、Array、Math等等。2,原型(prototype)在JS中,这是一种创建对象属性和方法的方式,通过prototype可以为对象添加新的属性和方法。通过prototype我们可以为JS标准对象...
本书《JavaScript标准参考教程(alpha)》作为中文版的完整版教材,提供了详尽的目录和书签功能,便于读者快速定位和学习。 首先,在第二章“为什么学习JavaScript?”中,作者列举了学习JavaScript的几大理由:它...
ECMA-262标准定义了对象为“属性的无序集合,每个属性存放一个原始值、对象或函数”。这说明对象是一种不依赖特定顺序的值的集合。在JavaScript中,对象与数组不同,数组是用于存储有序的值的集合。 面向对象语言...
8. **ES6及以后的改进**:随着ECMAScript标准的更新,JavaScript引入了类(class)语法糖,使得面向对象编程更加直观,但其底层仍然是基于原型的。 理解JavaScript的面向对象特性对于编写高效、可维护的代码至关...
### JavaScript面向对象编程详解 #### 一、JavaScript面向对象编程简介 JavaScript作为一种广泛使用的脚本语言,虽然起源于...随着ES6及后续版本标准的引入,JavaScript面向对象编程的语法和功能变得更加简洁和强大。
- **服务器端脚本:** Node.js 的出现使得 JavaScript 也可以用于服务器端开发。 #### 二、JavaScript 编写与执行环境 - **编写环境:** 可以使用任何文本编辑器(如 Notepad++、Sublime Text、VS Code 等)来编写...
首先,JavaScript的核心对象包括全局对象、函数对象、数组对象、日期对象、正则表达式对象以及错误对象等。全局对象在任何作用域下都是可访问的,它是所有变量和函数的容器,例如`window`在浏览器环境中就是全局对象...