美文网首页
js类型转换

js类型转换

作者: 小猪佩奇的王子 | 来源:发表于2019-11-16 23:16 被阅读0次

记录一些常见的坑

js中的6个假值

false, null, undefined, 0, NaN, ''

https://www.jb51.net/article/122992.htm

隐式类型转换规则

ToPrimitive对原始类型不发生转换处理,只针对引用类型(object)的,其目的是将引用类型(object)转换为非对象类型,也就是原始类型。

ToPrimitive 运算符接受一个值,和一个可选的 期望类型作参数。ToPrimitive 运算符将值转换为非对象类型,如果对象有能力被转换为不止一种原语类型,可以使用可选的 期望类型 来暗示那个类型

/**
* @obj 需要转换的对象
* @type 期望转换为的原始数据类型,可选
*/
ToPrimitive(obj,type)

type不同值的说明

type为string:

先调用obj的toString方法,如果为原始值,则return,否则第2步调用obj的valueOf方法,如果为原始值,则return,否则第3步抛出TypeError 异常

type为number:

调用obj的valueOf方法,如果为原始值,则返回,否则下第2步调用obj的toString方法,如果为原始值,则return,否则第3步抛出TypeError 异常

type参数为空)

该对象为Date,则type被设置为String 否则,type被设置为Number
为空时,date类型的先调用toString(),其他引用类型先调用valueOf()

总结

  • 比较运算符中,两边都会转为number类型

  • +运算时,若包含引用类型,则转为字符串类型

  • +-开头的一元运算法,会转为number类型,undefined会转为NaN

验证

// ### 含有引用类型
1+{} // "1[object Object]"
{}+1 // 1,前面的{}被当作空代码块,若为表达式,则转为[object Object]
1+[] // "1"

// ### 比较
[] == false // '' == false -> 0 == 0
[] == ![] // '' == false -> 0 == 0
false == undefined // 0 == NaN

// 特例
null == undefined //true

### +, -
+{} // NaN
-'123' // -123
+true // 1

对象的valueOf和toString

var obj = {
    toString: function() {
        return "a"
    },
    valueOf: function() {
        return "b"
    }
}
//先调用valueOf,若返回原始类型,则返回
//若只重写toString方法,则直接调用toString
console.log(1 + obj) //"1b"

Date对象的特别说明

var d = new Date()

console.log(d == d.toString()) // toString() == Sat Nov 16 2019 23:24:45 GMT+0800
console.log(d == d.valueOf) // valueOf() == 1573917885718

console.log(d - 1) // 1573917989664

测试

[] == ![] //true
NaN !== NaN //true
null == undefined //true
 
1 == true //true
2 == true //false
"2" == true //false
 
null > 0 //false
null < 0  //false
null == 0  //true
null >= 0 //true
 

true + 1 //2
undefined + 1 //NaN 
 
let obj = {};
 
// 代码块
{} + 1 // 1
{ 1 + 1 } + 1 //1
 
// 表达式
obj + 1 //[object Object]1
{} + {} //chrome [object Object][object Object], fireFox NaN
 
[] + {} //[object Object]
[] + obj //[object Object]
+ [] //0
{} + [] //0
obj + [] [object Object]
 
[2,3] + [1,2] //"2312"
[2] + 1 //"21"
[2] + (-1) //"2-1"
 

[2] - 1 //1
[2,3] - 1 //NaN
{} - 1 //-1
1-{} //NaN

相关文章

  • javaScript中数据类型转换方法

    JS 数据类型转换 方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了...

  • 数据类型转换

    JS 数据类型转换 方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了...

  • JavaScript类型转换

    在js中数据类型转换一般分为两种,即强制类型转换和隐式类型转换(利用js弱变量类型转换)。 强制类型转换 即通过使...

  • 前端开发入门到实战:JavaScript字符串转换数字

    js 字符串转换数字方法主要有三种: 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供...

  • 前端开发入门到实战:JavaScript字符串转换数字

    js 字符串转换数字方法主要有三种: 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供...

  • js中的类型转换

    在js中数据转换分为3种:隐式类型转换,强制类型转换,函数转换 1.隐式类型转换 (1):运算符转换 js中的值在...

  • JS类型转换

    方法主要有三种 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: js提供了parseInt()...

  • js关于字符串和数字的转换

    js字符串转换成数字 js 字符串转换数字方法主要有三种:转换函数、强制类型转换、利用JS变量弱类型特点进行转换 ...

  • JavaScript字符串转换数字

    这里记录js 字符串转换数字的三种主要方法: 转换函数、强制类型转换、利用js变量弱类型转换。 1. 转换函数: ...

  • JS字符串与数字的相互转换 的3种方式

    转换函数、强制类型转换、利用JS变量弱类型特点进行转换 js字符串转数字# 1. 转换函数## 只有对String...

网友评论

      本文标题:js类型转换

      本文链接:https://www.haomeiwen.com/subject/bnuuictx.html