hn-failte's blog hn-failte's blog
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

hn-failte

前端cv仔
首页
  • 前端文章

    • JavaScript
    • Vue
    • React
    • Webpack
    • 混合开发
  • 学习笔记

    • 《JavaScript教程》笔记
    • 《JavaScript高级程序设计》笔记
    • 《ES6 教程》笔记
    • 《Vue》笔记
    • 《React》笔记
    • 《TypeScript 从零实现 axios》
    • 《Git》学习笔记
    • TypeScript笔记
    • JS设计模式总结笔记
  • HTML&CSS
  • HTML
  • CSS
  • CSS预处理
  • 技术文档
  • GitHub技巧
  • Nodejs
  • 博客搭建
  • 算法
  • 数据库
  • 操作系统
  • 工具
  • 学习
  • 面试
  • 心情杂货
  • 前端相关
  • 实用技巧
  • 友情链接
关于
收藏
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • Webpack

  • React

  • JavaScript

    • new命令原理
    • ES5面向对象
    • ES6面向对象
    • 多种数组去重性能对比
    • JS随机打乱数组
    • 判断是否为移动端浏览器
    • 将一维数组按指定长度转为二维数组
    • 防抖与节流函数
    • JS获取和修改url参数
    • 比typeof运算符更准确的类型判断
    • 三级目录

    • JavaScript

      • JavaScript之函数尾调用与函数尾递归
      • 一种实现call、apply、bind的方法
      • 实现call、apply、bind
      • JavaScript闭包详解
      • 窗口间的通信与iframe跨域
      • JavaScript逻辑运算符“&&”和“||”短路原则的应用
      • Object原型梳理
      • JavaScript设计模式之发布&订阅模式
      • JavaScript核心:两链一包
      • JavaScript之正则
      • 字符串拼接性能优化
      • JavaScript变量转换
        • JavaScript变量转换
        • 目录
        • 一、自动转换
          • (1)Number与Boolean:
          • (2)Number与String:
          • (3)String与Boolean
          • (4)null的自动转换
          • (5)undefined的自动转换
        • 二、强制转换
          • 1、运算强制转换
          • (3)String与Boolean
          • 2、类型强制转换
  • Vue

  • 混合开发

  • 学习笔记

  • 微信小程序

  • 前端
  • JavaScript
  • JavaScript
hn-failte
2018-03-29

JavaScript变量转换

# JavaScript变量转换

# 目录

  • 自动转换
    • (1)Number与Boolean
    • (2)Number与String
    • (3)String与Boolean
    • (4)null的自动转换
    • (5)undefined的自动转换
  • 强制转换
    • 运算强制转换
      • (1)Number与Boolean
      • (2)Number与String
      • (3)String与Boolean
      • (4)null
      • (5)undefined
    • 类型强制转换
      • (1)Number
      • (2)String
      • (3)Boolean
      • (4)null
      • (5)undefined

# 一、自动转换

"=="的自动转换

自动转换优先级:number>boolean>String,越小越先转换

# (1)Number与Boolean:

console.log(0==false); //true
console.log(1==true);  //true
console.log(2==true);  //flase
//这个过程其实是Boolean类型转换为数字的过程

# (2)Number与String:

console.log(""==0);  //true
console.log("12"==12);  //true
console.log("12a"==12);  //false
//String自动转换时只能转换纯数字的字符串

# (3)String与Boolean

console.log(""==false);  //true
console.log("s"==true);  //true
//字符串转换为boolean均为true

# (4)null的自动转换

null的本质是空对象,自动转换时会处理空对象的引用地址,转换为数字与其他对象的处理

console.log(null==0);  //false
//地址是数字,且肯定不是0

console.log(null==false);  //false
console.log(null==true);  //false
//地址是数字,比较时会将boolean转换为数字

console.log(null=="null");  //false
console.log(null=="");  //false
//地址为数字,比较时会将String转换为数字

# (5)undefined的自动转换

undefined表示未定义,不带任何东西,大家可以理解为老顽固(偷笑)

console.log(undefined==0);  //false
//无法自动转换数字

console.log(undefined==false);  //false
console.log(undefined==true);  //false
//无法自动转换boolean

console.log(undefined=="");  //false
console.log(undefined=="undefined");  //false
//无法自动转换为String

console.log(undefined==null);  //true
console.log(undefined===null);  //false
//null是空对象,会被认为是undefined,但严格的来说两者是不相等的

# 二、强制转换

# 1、运算强制转换

"+"会尝试将两端的值尝试转换为字符串或数字。优先级:String>Number

# (1)Number与Boolean:

console.log(1+false); //1
console.log(1+true);  //2

# (2)Number与String:

console.log(""+1);  //"1"
console.log("1"+1);  //"11"
//运算时,String优先级大于Number,Number转换为String

# (3)String与Boolean

console.log(""+false);  //false
console.log(""+true);  //true
console.log(typeof(""+true));  //String
//按照优先级,会将boolean转换为String

# (4)null

console.log(null+1);  //1
//null的本质是空对象,强制转换会转换为0

# (5)undefined

console.log(undefined+0);  //NaN
//强制转换数字时为NaN
console.log(Boolean(undefined));  //false

# 2、类型强制转换

# (1)Number

String:
这里说下String()和toString()的区别
toString()可以将除了null、undefined以外的一切对象转换为String,且toString()可以接收第二个参数,将字符串的进制进行改变
String()可以将任何对象转换为String,String只有一个传参

Boolean:
console.log(Boolean(0));  //false
console.log(Boolean(1));  //true
console.log(Boolean(2));  //true
console.log(Boolean(-2));  //true
//除0以外均为true

# (2)String

Number:
console.log(Number("1"));  //1
console.log(Number("1a"));  //NaN
console.log(Number(""));  //0
console.log(parseInt("1a"));  //1
console.log(parseInt("a1"));  //NaN
console.log(parseInt(""));  //NaN
//使用Number进行转换时必须是纯数字字符串,否则为NaN
//使用parseInt转换时,头部必须有数字,否则为NaN
//parseInt是全局函数,不属于Number,与Number强制转换有区别

Boolean:
console.log(Boolean(""));  //false
console.log(Boolean("true"));  //true
console.log(Boolean("false"));  //true
//String为空是flase,其他均为true

# (3)Boolean

Number:
console.log(Number(false));  //0
console.log(Number(true));  //1

String:
输出对应的字符串

# (4)null

Number:
console.log(Number(null));  //0

String:
输出对应的字符串

Boolean:
console.log(Boolean(null));  //false

# (5)undefined

Number:
console.log(Number(undefined));  //NaN
//此种方式强制转换依旧为非数字

String:
输出对应的字符串

Boolean:
console.log(Boolean(undefined));  //false

码字不易,后面还会放出各种文章,喜欢的关注一下我吖,你们的关注是我最大的动力

github:github.com/hn-failte (opens new window)

个人博客:hn-failte.github.io (opens new window)

编辑 (opens new window)
#Variable
上次更新: 2021/08/05, 12:37:41
字符串拼接性能优化
Vue的响应式原理

← 字符串拼接性能优化 Vue的响应式原理→

最近更新
01
基于 Taro 的微信小程序优化指南
02-16
02
搭建一个极简混合开发架构
08-03
03
使用State Hook
04-06
更多文章>
Theme by Vdoing | Copyright © 2017-2023 hn-failte | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式