`

js 标准对象

    博客分类:
  • js
 
阅读更多

转自: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'

可见,numberstringbooleanfunctionundefined有别于其他类型。特别注意null的类型是objectArray的类型也是object,如果我们用typeof将无法区分出nullArray和通常意义上的object——{}

包装对象

除了这些类型外,JavaScript还提供了包装对象,熟悉Java的小伙伴肯定很清楚intInteger这种暧昧关系。

numberbooleanstring都有包装对象。没错,在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类型!!!

如果我们在使用NumberBooleanString时,没有写new会发生什么情况?

此时,Number()BooleanString()被当做普通函数,把任何类型的数据转换为numberbooleanstring类型(注意不是其包装类型):

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操作符可以判断出numberbooleanstringfunctionundefined

  • 判断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 标准对象_.docx

    JavaScript中的标准对象是编程语言的核心组成部分,它们提供了一系列预定义的功能和属性,使得开发者能够更加高效地处理数据和实现各种复杂逻辑。在这个文档中,我们将深入探讨JavaScript中的几个关键标准对象,包括...

    JavaScript标准对象_动力节点Java学院整理

    JavaScript标准对象是在JavaScript编程语言中预定义的对象,它们是编程语言的一部分,提供了许多常用的工具和接口,使得开发人员能够更便捷地操作数据和执行操作。JavaScript的标准对象涵盖了数据类型的包装对象,...

    浅谈JavaScript 标准对象

    最后,JavaScript中的Date对象还有一些特殊的日期计算和格式化功能,但此处提到的以上知识点是学习和理解JavaScript标准对象的基础。通过这些内容,开发者能够掌握JavaScript中处理基本数据类型和日期时间的核心概念...

    JavaScript标准参考教程

    《JavaScript标准参考教程》是一本全面介绍JavaScript编程语言的书籍,其内容涵盖了从基础语法、数据类型、函数到高级特性如数组操作、错误处理、编程风格等各个方面的知识。阮一峰作为作者,将多年的经验和网络资料...

    JAVASCRIPT 面向对象编程精要

    ### JavaScript面向对象编程精要 #### 一、引言 JavaScript是一种灵活且强大的脚本语言,它虽然起源于一种简单的浏览器脚本语言,但随着...随着ES6及更高版本标准的引入,JavaScript的面向对象能力得到了进一步增强。

    js自定义对象讲解

    它们与JS的标准对象相对,后者如Date、Array等是由语言内置的。 1.2.2 原型(prototype) 原型是JavaScript中一种特殊的概念,它允许我们在运行时为对象添加新的属性和方法。通过`prototype`,我们可以扩展内置对象...

    javascript本地对象_内置对象和宿主对象

    本地对象(Native Objects)是ECMAScript标准定义的,独立于宿主环境(如浏览器或Node.js环境)的对象。这些对象包括基本类型如`Object`、`Function`、`Array`、`String`、`Boolean`、`Number`、`Date`、`RegExp`,...

    JavaScript面向对象的支持

    JavaScript是一种广泛应用于Web开发的脚本语言,它虽然支持面向对象编程...同时,随着语言的不断发展,诸如类的引入和模块系统的标准化,JavaScript的面向对象编程正变得越来越成熟,为开发者提供了更多的工具和选择。

    JS面向对象教程

    随着ES6标准的引入,JavaScript正式引入了类(class)的概念,使得其面向对象编程(OOP)更加直观和规范。但在ES6之前,JavaScript早已支持面向对象编程,尽管其方式更为灵活,也更依赖于原型链。 #### 二、使用函数...

    js 贪吃蛇(面向对象)

    总结来说,"js 贪吃蛇(面向对象)"案例提供了学习和实践JavaScript面向对象编程的好机会。通过分析和实现这个案例,开发者可以深入理解面向对象的设计原则,提高代码复用和维护性,同时也能体会到面向对象编程在...

    js对象与打印对象分析比较

    与自定义对象相对应的是JS标准对象,例如Date、Array、Math等等。2,原型(prototype)在JS中,这是一种创建对象属性和方法的方式,通过prototype可以为对象添加新的属性和方法。通过prototype我们可以为JS标准对象...

    JavaScript标准参考教程(alpha)

    本书《JavaScript标准参考教程(alpha)》作为中文版的完整版教材,提供了详尽的目录和书签功能,便于读者快速定位和学习。 首先,在第二章“为什么学习JavaScript?”中,作者列举了学习JavaScript的几大理由:它...

    js中对象和面向对象与Json介绍

    ECMA-262标准定义了对象为“属性的无序集合,每个属性存放一个原始值、对象或函数”。这说明对象是一种不依赖特定顺序的值的集合。在JavaScript中,对象与数组不同,数组是用于存储有序的值的集合。 面向对象语言...

    javascript面向对象教程

    8. **ES6及以后的改进**:随着ECMAScript标准的更新,JavaScript引入了类(class)语法糖,使得面向对象编程更加直观,但其底层仍然是基于原型的。 理解JavaScript的面向对象特性对于编写高效、可维护的代码至关...

    JavaScript 面向对象编程

    ### JavaScript面向对象编程详解 #### 一、JavaScript面向对象编程简介 JavaScript作为一种广泛使用的脚本语言,虽然起源于...随着ES6及后续版本标准的引入,JavaScript面向对象编程的语法和功能变得更加简洁和强大。

    javascript对象大全

    - **服务器端脚本:** Node.js 的出现使得 JavaScript 也可以用于服务器端开发。 #### 二、JavaScript 编写与执行环境 - **编写环境:** 可以使用任何文本编辑器(如 Notepad++、Sublime Text、VS Code 等)来编写...

    即查即用-JavaScript核心对象参考手册.rar

    首先,JavaScript的核心对象包括全局对象、函数对象、数组对象、日期对象、正则表达式对象以及错误对象等。全局对象在任何作用域下都是可访问的,它是所有变量和函数的容器,例如`window`在浏览器环境中就是全局对象...

Global site tag (gtag.js) - Google Analytics