类型转换
JavaScript 是弱类型语言,所以会在任何可能的情况下应用强制类型转换。
// 下面的比较结果是:true
new Number(10) == 10; // Number.toString() 返回的字符串被再次转换为数字
10 == '10'; // 字符串被转换为数字
10 == '+10 '; // 同上
10 == '010'; // 同上
isNaN(null) == false; // null 被转换为数字 0
// 0 当然不是一个 NaN(译者注:否定之否定)
// 下面的比较结果是:false
10 == 010;
10 == '-10';
ES5 提示: 以 0
开头的数字字面值会被作为八进制数字解析。
而在 ECMAScript 5 严格模式下,这个特性被移除了。
为了避免上面复杂的强制类型转换,强烈推荐使用严格的等于操作符。
虽然这可以避免大部分的问题,但 JavaScript 的弱类型系统仍然会导致一些其它问题。
内置类型的构造函数
内置类型(比如 Number
和 String
)的构造函数在被调用时,使用或者不使用 new
的结果完全不同。
new Number(10) === 10; // False, 对象与数字的比较
Number(10) === 10; // True, 数字与数字的比较
new Number(10) + 0 === 10; // True, 由于隐式的类型转换
使用内置类型 Number
作为构造函数将会创建一个新的 Number
对象,
而在不使用 new
关键字的 Number
函数更像是一个数字转换器。
另外,在比较中引入对象的字面值将会导致更加复杂的强制类型转换。
最好的选择是把要比较的值显式的转换为三种可能的类型之一。
转换为字符串
'' + 10 === '10'; // true
将一个值加上空字符串可以轻松转换为字符串类型。
转换为数字
+'10' === 10; // true
使用一元的加号操作符,可以把字符串转换为数字。
译者注:字符串转换为数字的常用方法:
+'010' === 10
Number('010') === 10
parseInt('010', 10) === 10 // 用来转换为整数
+'010.2' === 10.2
Number('010.2') === 10.2
parseInt('010.2', 10) === 10
转换为布尔型
通过使用 否 操作符两次,可以把一个值转换为布尔型。
!!'foo'; // true
!!''; // false
!!'0'; // true
!!'1'; // true
!!'-1' // true
!!{}; // true
!!true; // true
分享到:
相关推荐
- **类型转换**: JavaScript会自动进行类型转换,但这可能导致意外的结果。理解隐式和显式类型转换是避免常见错误的关键。 #### 核心概念与最佳实践 - **避免使用`eval`**: `eval`函数执行字符串内的代码,这不仅...
2. **类型转换**:JavaScript是一种动态类型的语言,这意味着变量的类型可以在运行时改变。隐式类型转换可能导致意外行为,比如`==`和`===`之间的区别。`==`比较会尝试将两边的值转换为同一类型再进行比较,而`===`...
JavaScript是一种动态类型语言,这意味着变量的类型可以在运行时改变。隐式类型转换可能导致意料之外的结果,尤其是涉及到`==`和`===`比较运算符时。 4. **函数与作用域**: 函数内部可以访问外部的变量,但外部...
对象可以进行字符串转换,例如`false.toString()`将返回字符串`"false"`,而数组如`[1,2,3]`调用`toString()`方法时则会返回`"1,2,3"`。 一个常见的误区认为数字字面量不是对象,这实际上是JavaScript解析器的一个...
【Babel】Babel是一个广泛使用的JavaScript编译器,它的主要任务是将ES6+(ECMAScript 2015及以后版本)的新特性转换为向后兼容的JavaScript代码,确保这些新特性可以在当前大多数浏览器或运行环境中运行。...
1. **基础语法**:变量声明(var、let、const)、数据类型(基本类型与引用类型)、控制流(条件语句、循环语句)、函数等。 2. **面向对象编程**:类与对象的概念,原型链,继承,封装,多态等。 3. **DOM操作**...
这些库允许开发者用Python定义类型系统(schemas)和解析器(resolvers),从而将数据模型转换为可查询的结构。 2. **Playground接口**:"Strawberry Garden"实现了GraphQL游乐场的前端部分,这通常涉及到在Python...
如果API返回JSON格式,我们可以使用`JSON.parse()`将其转换为JavaScript对象。 3. **渲染数据**:获取到数据后,我们利用DOM操作将数据插入到HTML元素中。例如,可以创建新的`<div>`元素,将引言内容和作者信息添加...
这个服务器还可能配置了自动编译功能,将Vue组件和其他源代码转换为浏览器可执行的JavaScript代码。 【生产环境构建】 当项目开发完成后,为了部署到生产环境,会使用"npm run build"命令。这个命令会进行代码的...
此外,可能使用预处理器如Sass或Less来增强CSS的功能,或者Babel将新特性的JavaScript代码转换为向后兼容的版本。 总而言之,pratiknilange.github.io项目可能涵盖了JavaScript的多个方面,从基础概念到现代Web开发...
2. 编译 CSS:cljs-css-modules 将这些模块转换为 Garden 表达式,然后由 Garden 进行编译,生成 CSS 文件。在这个过程中,每个模块的类名都会被转换为唯一的哈希值,防止全局冲突。 3. 引用 CSS 模块:在需要使用...
这段代码首先使用Node.js的`fs`模块读取了JSON文件,并将其内容转换为JavaScript对象。然后,它从对象中提取了名字数组,并计算了数组的长度。接着,通过生成一个介于0到数组长度之间的随机数来选择一个随机的名字。...
Next.js 是一个由 Vercel 公司维护的开源JavaScript框架,专门用于构建服务器端渲染(SSR)和静态生成(SSG)的React应用。它简化了React应用程序的开发流程,允许开发者快速创建功能丰富的、性能优秀的Web应用程序...
"gatsby-garden-master"这个文件名暗示了这是一个关于Gatsby的项目源代码库,可能是项目的主分支或主线版本。 在深入探讨这个项目之前,我们需要了解Gatsby的一些关键特性: 1. **React**: Gatsby的基础是React,...
3. **Styler** 库:ClojureScript社区可能存在一些库,如`garden`或`clj-styled`,它们允许开发者用Clojure语法编写CSS,并在运行时转换为JavaScript对象,进而应用到DOM元素上。 4. **CSS Macros**:ClojureScript...
在实际开发中,`capstoneGardenApp_React`项目很可能还依赖于其他库和工具,比如Redux进行状态管理,React Router进行页面路由,Webpack或Parcel进行模块打包,Babel转换语法,以及各种UI库如Material-UI或Ant ...
:house_with_garden: 网站: :red_heart_selector: 对于开发人员,由开发人员执行。 :lizard: 概述Lagarto Suite是用Java编写HTML / XML解析器系列。 它由以下库组成: LagartoParser是一种通用的快速,通用的基于...
"红比尤特花园"(Red Butte Garden)在GitHub上的项目页面,主要涉及的是一个网站的源代码,标签为"HTML",意味着这个项目主要使用了超文本标记语言(HTML)来构建网页结构。HTML是互联网上最基础的标记语言,用于...