javascript有时会自动根据需要将数据类型进行转换,这是我们不能控制的,这是javascript的自动类型转换,之后我也会对这种情况写个学习笔记的博文,现在引出这个,希望能更深的理解强制数据类型转换的主观性。
今天得主角---强制转换主要指使用Number、String和Boolean三个构造函数,是手动将各种类型的值,转换成数字、字符串或者布尔值,是我们主观想法想要让它转换的!
Number函数:强制转换成数值
使用Number函数,可以将任意类型的值转化成数字。
(1)原始类型值(数值,字符串,布尔值等基本类型或叫值类型)的转换规则
>数值:转换后还是原来的值。
>字符串:如果可以被解析为数值,则转换为相应的数值,否则得到NaN(了解更多)。空字符串转为0。
>布尔值:true转成1,false转成0。
>undefined:转成NaN。(题外话:所以数值与undefined的任何运算[+、-、*、/]都得到NaN)
>null:转成0。
ex:
Number("123") // 123
Number("123a") // NaN
Number("123.6") // 123.6
Number("123.6.9") // NaN
Number("123.6a") // NaN
Number(false) // 0 ---布尔值true转为1,false转为0
Number(true) // 1 ---同上
Number(undefined) // NaN --- 要记住哦!以及任何数与undefined的任何运算的结果都是NaN
Number(null) // 0
Number("") // 0 ---空字符串转为0
Number(" ") // 0 ---空字符串转为0,前后空格被自动忽略了
Number('\t\v\r12.34\n') // 12.34 ,前后的空格、换行等都被忽略了
(2)对象类型(数组,函数,object{},RegExp等复合数据类型或叫引用类型)转换为Number类型的规则
对象数据类型的转换规则比较复杂,遵循以下步骤
1)先调用对象自身的valueOf方法,如果该方法返回基本数据类型(值类型,数值、字符串或布尔值等)的值,则直接对该值使用Number方法,遵循上面原始类型的转换规则进行转换,不再进行后续步骤。
2)如果valueOf方法返回复合类型的值,再调用对象自身的toString方法,如果toString方法返回基本数据类型(值类型,数值、字符串或布尔值等)的值,则直接对该值使用Number方法,遵循上面原始类型的转换规则进行转换,不再进行后续步骤。
3)如果toString方法返回的是复合类型的值,则报错。
|
对于以上步骤的推敲与验证请参考后面的网址,我这篇学习笔记大多数部分参考的这篇文章:http://javascript.ruanyifeng.com/grammar/conversion.html
ex:
Number( {a:1} ) // NaN---首先调用valueOf方法,得到的是对象{a:1}本身,然后调用toString方法得到字符串"[object Object]",再使用Number方法,得到NaN的最终结果
Number( [1,2,3]) // NaN --- 首先数组调用valueOf方法,得到数组[1,2,3]本身,然后调用toString方法得到字符串"1,2,3",再使用Number方法,得到NaN的最终结果
var a = new Number(5); Number(a) // 5---这里a是封装的number类型的对象类型,a先调用valueOf方法,直接得到了基本类型的数据,所以直接按基本数据类型的转换规则得到了5的结果
var a = new String("5");Number(a) // 5---原理同上,差别在于valueOf直接得到了字符串“5”
var a = new String(true);Number(a + "2") // 5---原理同上,差别在于valueOf直接得到了字符串“5”
String函数:强制转换成字符串
ex:
使用String函数,可以将任意类型的值转化成字符串。规则如下:
(1)原始类型值(数值,字符串,布尔值等基本类型或叫值类型)的转换规则
>数值:转为相应的字符串。
>字符串:转换后还是原来的值。
>布尔值:true转为“true”,false转为“false”。
>undefined:转为“undefined”。
>null:转为“null ”。
ex:
String(123) // "123"
var a = 10; a.toString() // 10
var a = 10.0; a.toString() // 10 ---需要注意一下
var a = 10.4; a.toString() // 10.4
String("abc") // "abc"
String(true) // "true"
String(undefined) // "undefined"
String(null) // "null"
(2)对象类型(数组,函数,object{},RegExp等复合数据类型或叫引用类型)转换为String类型的规则
如果要将对象转为字符串,则是采用以下步骤。
1)先调用toString方法,如果该方法返回基本数据类型(值类型,数值、字符串或布尔值等)的值,则直接对该值使用String方法,遵循上面原始类型的转换规则进行转换,不再进行以下步骤。
2)如果toString方法返回复合类型的值,再调用valueOf方法,如果valueOf方法返回基本数据类型(值类型,数值、字符串或布尔值等)的值,则直接对该值使用String方法,遵循上面原始类型的转换规则进行转换,不再进行以下步骤。(恕我才疏学浅,我不能想到调用toString方法返回复合类型的例子,所以这里都是执行第一步就结束了,没有执行第二步的情况,哪位大牛能举出例子,小妹不胜感激!)
3)如果valueOf方法返回的是复合类型的值,则报错。
*String方法的这种过程正好与Number方法相反。Number是先调用valueOf方法,String是先调用toString方法。
|
对于以上步骤的推敲与验证同样参考:http://javascript.ruanyifeng.com/grammar/conversion.html
String( {a:1} ) // "[object Object]" ---先调用{a:1}的toString方法直接得到字符串"[object Object]"
String( [1,2] ) // "1,2" ---数组调用toSring方法,就是把各项值通过逗号(,)连接成的字符串
String( [] ) // "" --- 空数组没有值,调用toString方法的话自然也不用逗号连接了,直接是空字符
String( /\d+/ ) // "/\d+/" --- 正则调用toString方法,得到正则表达式本身的字符串
String( function(){ alert("a") } ) // "function (){ alert("a") }" --- 函数调用toString方法,即得到函数本身的字符串
Boolean函数:强制转换成布尔值
使用Boolean函数,可以将任意类型的变量转为布尔值。
(1)原始类型值(数值,字符串,布尔值等基本类型或叫值类型)的转换规则
以下六个值的转化结果为false,其他的值 全部 为 true 。
>undefined
>null
>-0
>+0
>NaN
>''(空字符串)
ex:
Boolean(undefined) // false
Boolean(null) // false
Boolean(0) // false
Boolean(NaN) // false
Boolean("") // false
Boolean(" ") // true --- 注意哦,Boolean方法不忽略前后空白字符,所以即使一个空格也会返回true
(2)对象类型的转换规则
所有对象的布尔值都是true,甚至连false对应的布尔对象也是true。
ex:
Boolean(new Boolean(false)) // true --- 充分印证所有的对象转换为布尔值都是true的真理
Boolean( [] ) // true
Boolean ( {} ) // true
相关推荐
类型转换是网页编程不可或缺的内容,本文先介绍自动类型转换,接着是强制性的显式类型转换,最后如何将基本数据类型提升为对象。 JavaScript的数据类型分为基本数据类型和复合数据类型。复合数据类型主要有对象、...
在这份"JavaScript程序设计课件:数据类型转换"中,主要讲解了如何在JavaScript中进行数据类型的转换,主要包括获取数据类型的方法以及三种主要的数据类型转换:字符串转换、数字转换和布尔型转换。 首先,了解数据...
本文档主要围绕 JavaScript 的数据类型转换进行详细介绍,包括显式类型转换(强制类型转换)与隐式类型转换。 #### 强制类型转换 强制类型转换是指程序员明确指定数据类型的转换过程,常见的转换目标包括字符串(`...
这种转换不依赖于开发者明确的类型转换命令,而是由JavaScript引擎根据语言的规则在背后完成。 JavaScript数据类型分为基本类型和引用类型。基本类型包括null、undefined、boolean、string、number六种,而object则...
- **强制类型转换(向下转型)**:从高级数据类型转换为低级数据类型需要使用强制类型转换,但需要注意可能会导致数据丢失或溢出。例如,从double转换为int时,小数部分会被舍去。 ```java double d = 10.5; ...
6. **JavaScript中的数据类型转换**: - `Number()`和`parseInt()`, `parseFloat()`用于字符串转数字。 - `toString()`将任何类型转换为字符串。 - `Boolean()`将值转换为布尔型,`null`和`undefined`转换为`...
2. 强制类型转换:当需要将一个数据类型转换为另一个不兼容的数据类型时,可以使用强制类型转换。例如,在C++中,可以使用`(new_type)old_value`的方式将old_value转换为new_type。但需要注意,不适当的转换可能导致...
在本文中,我们将详细探讨JavaScript中的数据类型转换规则,这些规则对于深入理解JavaScript编程至关重要。 首先,我们来看看JavaScript中的基本数据类型和复杂数据类型。JavaScript有五种基本数据类型:Null、...
本文将深入探讨JavaScript中的数据类型,包括基本数据类型和引用数据类型,以及如何进行强制类型转换。 首先,我们要了解JavaScript中的数据类型主要有六种: 1. **字面量、变量和标识符**: - **字面量**是指在...
强制类型转换在JavaScript中是常见的,主要有三种主要的转换函数:`Boolean()`, `Number()`, 和 `String()`。 1. **Boolean(value)**: 这个函数将任何值转换为布尔类型(`true` 或 `false`)。通常,非零数字、非空...
- **强制转换**:当你需要明确地将一种数据类型转换为另一种时,可以使用强制转换。主要有两种方式: - 调用对象的 `toString()` 方法,将数据转换为字符串。但要注意,`null` 和 `undefined` 没有此方法,尝试调用...
JavaScript数据的强制类型转换 #### 转换为String类型 - **调用toString()方法**: - 大多数类型都有这个方法,但`null`和`undefined`没有,调用会抛出错误。 - **使用String()构造函数**: - 可以将任何类型转换...
本文主要由19级学生易海滔在2020年4月20日撰写,详细介绍了JavaScript中的数据类型和相关的强制类型转换方法,使用的主要开发工具是Adobe Dreamweaver(DW),这是一种常用于网页设计和前端开发的软件。 首先,我们...
javascript中,变量可以赋予任何类型的值。但是运算符对数据类型是有要求的,如果运算符的类型与预期不符,就会自动转换类型。数据类型除了可以自动转换以外,还可以手动强制转换。
接下来,我们将全面分析JavaScript中的数据类型转换机制。 首先,我们需要理解什么是弱类型语言。弱类型语言,又称为动态类型语言,指的是在声明变量时不需要指定数据类型的语言,变量的数据类型可以在运行时根据上...
强制类型转换是JavaScript语言中的一个重要概念,它涉及到数据类型在运行时的自动或显式转换。理解这个概念对于任何使用JavaScript的开发者来说都是必要的,因为这涉及到代码的正确执行以及避免可能的bug。 首先,...
JavaScript 中可以进行数据类型转换,包括强制转换和弱类型转换。强制转换可以使用 parseInt() 和 parseFloat() 函数,将字符串转换为数字。弱类型转换可以使用 + 号和 - 号,将数字转换为字符串。 运算符 ...