js类型转换

记录一些常见的坑

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
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容

  • 写在前面的话 近期刷了点js的面试题,发现很多基础知识已经模糊,于是重新回去看了一下《javascript权威指南...
    栗子酥小小阅读 772评论 0 0
  • 原文 有意思的 JavaScript 原始值到原始值的转换 原始值转化为布尔值所有的假值(undefined、nu...
    蛮吉大人123阅读 279评论 0 0
  • javaScript类型转换 标签(空格分隔): 未分类 隐式转换 当遇到以下几种情况,JavaScript会自动...
    时修七年阅读 394评论 0 0
  • 本文是lhyt本人原创,希望用通俗易懂的方法来理解一些细节和难点。转载时请注明出处。文章最早出现于本人github...
    lhyt阅读 303评论 0 1
  • 司命和叠风走后,凤九和少绾各执一封请柬,回了狐狸洞中,坐到了石桌边,气氛有些微妙,有些不自然,熟知内情的人,都会认...
    转角花开阅读 2,934评论 2 32