待续

类型判断的三种方式

类型判断的三种方式

Wenyuan
2021-03-31
3 min

# 变量声明

# var声明特点

  • 函数作用域
  • 可重复声明
  • 变量提升
  • 省略var则视为全局变量

# let声明特点

  • 块级作用域

  • 不可重复声明

    //都会报错SyntaxError
    let name
    let name
    
    let name
    var name
    
    var name
    let name
    
    1
    2
    3
    4
    5
    6
    7
    8
    9
  • 暂时性死区代替变量提升

  • var不同,使用let再全局作用域声明的变量不会成为Window对象属性

# const声明特点

  • 块级作用域
  • 不可重复声明
  • 暂时性死区代替变量提升
  • 声明时必须同时初始化变量,且不可修改

# 数据类型

简单数据类型:Undefined、Null、Boolean、Number、String和Symbol;

复杂数据类型:Object (function)

# Boolean()转型函数的转换规则

会转换为false的值有:''0NaNnullundefined,发现特点都是基本数据类型

需要注意{}[]转换布尔值的结果都是true

区分大小写,True不是布尔值。

# 转换时机--隐式转换

执行if语句时会自动进行布尔值的转换。

# Number数据类型

NaN 非数值
Infinity 正无穷大
-Infinity 负无穷大
Number.MIN_VALUE 最小值
Number.MAX_VALUE 最大值

判断是 0 还是 -0 ?

console.log(5/0); // Infinity
console.log(5/-0); // -Infinity
// 0、+0、-0相除返回NaN
console.log(0/0); // NaN
1
2
3
4

函数isFinite()用来判断是不是无穷大,

函数isNaN()用来判断是不是非数值,在进行判断前会先进行数值型的隐式转换

console.log(isNaN(NaN)); // true
console.log(isNaN(10)); // false,转换为10
console.log(isNaN('10')); // false,转换为10
console.log(isNaN('lwy')); // true
console.log(isNaN(true)); // false,转换为1
1
2
3
4
5

# Number()和parseInt()转换规则对比

对照表 Number parseInt
true/false 1/0 NaN
null 0 NaN
undefined NaN NaN
'' 0 NaN
'114a' NaN 114
'a114' NaN NaN
'22.2' 22.2 22

Number()和parseInt()都会省略前面的0,且能识别不同的整数格式;Number()如果发现字符串中存在非数值则直接返回NaN,parseInt()会在非数值处截断。

同时parseInt()接受第二个参数,用于指定底数(进制数)。

# toString()和String()对比

除了nullundefined的所有值都有toString()方法,用法如num.toString(),并且它接受一个参数,表示以什么底数输出数值的字符串表示。

String()在使用前会判断,如果值有toString()方法则调用,如果值是null返回null;值是undefined则返回undefined

# 类型检测

# typeof操作符

可以检测undefinedbooleannumberstringsymbolfunctionobject 共 7 种

需要注意

  1. typeof null返回的结果是object,因为特殊值null被认为是对空对象的引用。

  2. 对于未声明声明未初始化的变量进行typeof都是返回undefined

可以写两篇博客,一篇是ES6的特性,比如箭头函数(this,不能被new),let,const与var的区别,就是不能变量提升和重复声明等,这样好记一些。

第二篇,隐式转换盘点,出上述还有==的四种转换规则。还有位运算的转换,比如~~,>>>