`
快乐_虫
  • 浏览: 7518 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

javascript中数据类型的自动转换

阅读更多
一、自动转换为布尔值---Boolean( if语句 的条件部分
1)当JavaScript遇到预期为布尔值的地方(比如if语句的条件部分),就会将非布尔值的参数自动转换为布尔值。
它的转换规则请参考博文《javascript---强制数据类型转换》中Boolean部分,也就是说,在预期为布尔值的地方,系统内部会自动调用Boolean方法。

因此除了以下六个值,其他都是自动转为true:
> undefined
> null
> +0
> -0
> NaN
> '' 空数组
 
二、自动转换为字符串---String
当JavaScript遇到预期为字符串的地方,就会将非字符串的数据自动转为字符串,转换规则与“强制转换为字符串”相同。
1)字符串的自动转换,主要发生在 加法运算 时。当一个值为字符串,另一个值为非字符串,则后者转为字符串。
运算子之中,只要有一个是字符串,则另一个不管是什么类型,都会被自动转化为字符串,然后执行字符串连接运算。通俗说就是:加号(+)两边只要有字符串,就把相应的值转化成字符串,然后做字符串连接操作
ex:
6 + "abc"  //  "6abc"
"a" + 2   //  "a2"
 
 
三、自动转换为数值
1)除了加法运算符有可能把运算子转为字符串外,其他运算符---减乘除  都会把两侧的运算子自动转成数值。
当JavaScript遇到预期为数值的地方,就会将参数值自动转换为数值,转换规则与“强制转换为数值”相同。
ex:
"5" - "2"  //  3
"5" * "2"  //  10
true - 1  //  0
false -1  //  -1
"1" - 1  //  0
"5" * []  //  0
false / "5"  //  0
"abc" - 1   //  NaN  ---  "abc"转化成数值是NaN,和NaN做任何数值运算结果都是NaN
 
*以上是二元算数运算符的例子,JavaScript的两个一元算数运算符——正号(+)和负号(-)也会把运算子自动转为数值。
 
ex:
+ "abc"   //  NaN 
- "abc"   //  NaN 
+ true   //  1 
- false  //  0
- "5"  //   -5
 
2)运算子为数值或布尔值的时候,布尔值自动转换成数值
这种情况下,执行加法运算,布尔值转为数值(true为1,fal se为0)。
 
ex:
true + 5  //    6 
true + false   //   1 
true + true   //   2
5 - true   //    4 
true * 8    //   8
 
四、运算子中存在对象
运算子之中存在对象(或者准确地说,存在非原始类型的值),则先调用该对象的val ueOf方法。如果返回结果为原始类型的值,则运用上面的规则;否则继续调用该对象的toString方法,对其返回值运用上面两条规则。
ex:
1 + [1,2]    //    "11,2"  ---  先调用[1,2].val ueOf(),结果还是数组[1,2]本身,则继续调用[1,2].toString(),结果字符串“1,2”,所以最终结果为字符串“11,2”。
 
1 + {a:1}     //    "1[object Object]"   ---   先调用{a:1}的valueOf方法,返回的就是这个对象的本身,因此接着对它调用toString方法。({a:1}).toString()默认返回字符串"[object Object]",所以最终结果就是字符串“1[object Object]”
 
 
 
{ a : 1 } + 1      //    1   ---   JavaScript引擎不将{a:1}视为对象,而是视为一个代码块,这个代码块没有返回值,所以被忽略。因此上面的代码,实际上等同于 {a:1};+1 ,所以最终结果就是1。为了避免这种情况,需要对{a:1}加上括号。如下
 
( { a : 1 } ) + 1      //     "[object Object]1"    ----   将{a:1}放置在括号之中,由于JavaScript引擎预期括号之中是一个值,所以不把它当作代码块处理,而是当作对象处理,所以最终结果为“[object Object]1”。
 
五、四个特殊表达式
1)空数组 + 空数组
    [] + []   //   ""    ---      首先,对空数组调用valueOf方法,返回的是数组本身;因此再对空数组调用
toString方法,生成空字符串;所以,最终结果就是空字符串。
 
2)空数组 + 空对象
   [ ]  +  { }    //    "[object Object]"     ---   这等同于空字符串与字符串“[object Object]”相加。因此,结果就是“[object Object]”。
 
3)空对象 + 空数组
  { }  + []      //   0        ---      JavaScript引擎将空对象视为一个空的代码块,加以忽略。因此,整个表达式就
变成“+ []”,等于对空数组求正值,因此结果就是0。
转化过程如下:+   [ ]
//   Number ( [ ] )
//   Number ( [ ] . toString ( ) )
//   Number ( " " )
//   0
如果JavaScript不把前面的空对象视为代码块,则结果为字符串“[object Object]”。
( { } ) + [ ]     //    "[object Object]"
 
4)空对象 + 空对象
{ }   +   { }    //    NaN     ---      JavaScript同样将第一个空对象视为一个空代码块,整个表达式就变成“+ {}”。这时,后一个空对象的Val ueOf方法得到本身,再调用toSting方法,得到字符串“[object Object]”,然后再将这个字符串转成数值,得到NaN。所以,最后的结果就是NaN。
转化过程如下: +   { }
//  Number( { } )
//  Number( { } . toString ( ) )
//  Number( " [object    Object ] " )
 
如果,第一个空对象不被JavaScript视为空代码块,就会得到“[object Object][object Object]”的结果。
( { } )   +   { }     / /     " [object Object][object Object] "
( { }   +   { } )    / /      " [object Object][object Object] "  
console . log ( { }   +   { } )        / /   " [object Object][object Object]"
var   a   =   { }   +   { } ;      a         / /   "[object Object][object Object] "
 
需要指出的是,对于第三和第四种情况,Node.j s的运行结果不同于浏览器环境。
{ }   +   { }     / /     " [object Object] [object Object]"
{ }   +   [ ]   / /   " [object Object] "
可以看到,Node.j s没有把第一个空对象视为代码块。原因是Node.j s的命令行环境,内部执行机制大概是下面的样子:
eval . call ( this , " ( function ( ) { return   { }   +   { } } ) . call ( this ) " )
Node.j s把命令行输入都放在eval中执行,所以不会把起首的大括号理解为空代码块加以忽略。
分享到:
评论

相关推荐

    JavaScript — 数据类型的转换1

    在JavaScript中,数据类型的转换是编程中不可或缺的一部分。在处理不同数据类型时,JavaScript会自动进行类型转换,以便于执行特定的操作。以下是关于JavaScript中数据类型转换的详细说明: 1. **原始数据类型转换*...

    JavaScript 动态网页实例 - 数据类型转换.rar

    类型转换是网页编程不可或缺的内容,本文先介绍自动类型转换,接着是强制性的显式类型转换,最后如何将基本数据类型提升为对象。 JavaScript的数据类型分为基本数据类型和复合数据类型。复合数据类型主要有对象、...

    javascript的数据类型

    本篇文章将深入解析JavaScript中的数据类型,并通过示例代码来进一步理解不同类型之间的转换。 #### 基础数据类型(Primitive Types) JavaScript中有六种基础数据类型: 1. **Undefined**:表示未定义的值。 2. ...

    JavaScript程序设计课件:数据类型转换.pptx

    在这份"JavaScript程序设计课件:数据类型转换"中,主要讲解了如何在JavaScript中进行数据类型的转换,主要包括获取数据类型的方法以及三种主要的数据类型转换:字符串转换、数字转换和布尔型转换。 首先,了解数据...

    详解Javascript数据类型的转换规则

    JavaScript内部提供了不同数据类型的自动转换机制,被称为隐式转换。在某些操作预期为某种类型的数据时,如果传入的不是那种类型,JavaScript会自动将其转换成预期类型。 此外,JavaScript还提供了强制类型转换的...

    JavaScript中的数据类型转换方法小结

    隐式类型转换发生在当JavaScript尝试对一个“错误”的数据类型执行操作时,会自动转换为“正确”的数据类型,以满足操作的要求。这种自动转换通常发生在算术运算、比较运算以及函数调用中。 例如,当数字与字符串...

    JavaScript+js语法基础+js数据类型+js数据类型转换+js运算符

    数据类型转换分为显式转换(使用`Number()`、`String()`、`Boolean()`等函数)和隐式转换(根据上下文环境自动转换)。例如,字符串和数字相加时,字符串会尝试转换为数字。 3. 运算符(Operators) JavaScript中的...

    Web前端开发技术-认识JavaScript的数据类型.pptx

    在实际开发中,还需要注意类型间的隐式转换,因为JavaScript会尝试在不同数据类型之间进行自动转换,这可能会导致预期之外的结果。因此,理解并熟练运用JavaScript的数据类型是每个前端开发者必备的技能。

    java中数据类型转换.doc

    在Java编程语言中,数据类型转换是编程过程中常见的操作,主要涉及基本数据类型之间的转换以及基本数据类型与字符串之间的转换。下面将详细讲解这些转换方式。 1. **基本数据类型的转换** Java中的基本数据类型...

    javascript中一些数据类型以及奇怪的特性

    - JavaScript允许不同数据类型之间的隐式转换,例如在比较操作中。这可能导致一些意料之外的结果,如`"2" 返回`false`,因为字符串"2"被转换为数字进行比较。 - 另一个常见问题是`==`和`===`的区别。`==`比较两个...

    数据类型的转换数据类型的转换

    总之,数据类型的转换是编程中不可或缺的一部分,正确理解和使用转换方法能有效避免潜在的错误,提高代码的健壮性和可维护性。在进行数据类型转换时,应充分考虑数据安全和性能,避免不必要的损失或异常。

    json一键转换为易语言自定义数据类型1

    为此,我们需要一种自动化转换算法,将 JSON 对象转换为易语言的自定义数据类型。 **2. 生成算法简介** 算法的核心是通过 JavaScript 来读取和解析 JSON 数据,然后利用易语言的语法生成对应的自定义数据类型代码...

    1902钟文宇Javascript数据类型总结.docx

    在JavaScript中,数据类型分为两种主要类别:基本数据类型(也称为原始数据类型)和引用数据类型。 基本数据类型包括五种: 1. **String**:字符串类型,用于存储文本信息。字符串是由一个或多个字符组成的序列,...

    全面了解JavaScript的数据类型转换

    由于JavaScript是一种弱类型语言,其变量在声明时不指定数据类型,而在赋值时确定,这导致在JavaScript中存在类型转换的现象,既包括隐式的自动类型转换,也包括显式的强制类型转换。接下来,我们将全面分析...

    javascript代码自动生成

    在JavaScript中,代码自动生成通常通过模板引擎、代码生成库或构建工具实现,帮助开发者快速创建复杂的代码结构或者根据特定规则生成代码。 1. **模板引擎**:如EJS、Handlebars和Pug等,它们允许开发者使用特定...

    week1.2数据类型转换.md

    本文档主要围绕 JavaScript 的数据类型转换进行详细介绍,包括显式类型转换(强制类型转换)与隐式类型转换。 #### 强制类型转换 强制类型转换是指程序员明确指定数据类型的转换过程,常见的转换目标包括字符串(`...

    Javascript类型转换的规则实例解析

    JavaScript类型转换是编程中非常重要的一个概念,它描述了在运算过程中,不同数据类型之间的自动或手动转换行为。JavaScript语言是动态类型的,这意味着你可以在运行时改变变量所存储值的类型,而这正是类型转换的...

    常用数据类型使用转换详解

    - **隐式转换**:无需显式操作,编译器会自动进行,例如在某些运算中不同数据类型的混合使用。 - **显式转换**:程序员通过特定语法进行强制类型转换,如Python的`int()`, `float()`, `str()`,Java的`(int)`, `...

Global site tag (gtag.js) - Google Analytics