数据类型、检测、转换

一、数据类型

基本数据类型:

  1. Undefine 变量初始值
  2. Null 空值 节点未获取到时为null
  3. Number 数字
  4. Boolean 布尔型 值为 true (真), false (假)
  5. String 字符串 只要用引号引起来的都为字符串

引用数据类型:
Object 对象 、Array 数组 、Function 函数

二、检测数据类型

1、typeof()

function fn(){} var t = typeof(fn); console.log(t)

typeof()检测变量的数据类型:
	1.undefined       (undefined)
	2.object (对象)  (null3.number          (number)
	4.boolean(布尔)  (truefalse5.string(字符串)  (string)
	6.function(函数)   (函数)

2、instanceof 可通过__proto__找到,缺点不能判断原始数据类型

var ary = [];
console.log(ary instanceof Array); // true
console.log(ary instanceof Object); // true
function fn() {}
console.log(fn instanceof Function); // true
console.log(fn instanceof Object); // true

3、constructor

检测和instanceof 差不多是一样,但他检测不了Object

4、Obeject.prototype.toString.call() 最推荐使用的

console.log(({}).toString.call(‘中国’)); // --> “[object String]”
console.log(({}).toString.call(true)); // --> [object Boolean]
console.log(({}).toString.call(undefined)); // -->[object Undefined]
console.log(({}).toString.call(null)); // -->[object Null]
console.log(({}).toString.call(function () {})); // -->[object Function]

三、数据类型转换

1、parseInt()取整数部分

2、parseFloat()取小数

console.log(parsetInt(99.9)); //99
console.log(parseFloat(99.009)); //99.009
parsetFloat(99.00); //99
parseInt('3a'); //3
parseFloat('9.9.8'); //9.9
parseFloat('abcd'); //NaN
parseInt('09/06/2019');//9
parseFloat('09/06/2019');//9

小结:
1.parseInt()parseFloat() 一般()里放数字,直接化正或化浮点;
2.()里为字符串时,若为数字开头,后边哪里出现字母就截断,若为字母开头,或者为空字符串均为NaN, 对于日期,/ 后面的数字就截断;
3.()里为字符串时,对于浮点数里有几个点,默认第一个点为小数点,之后的均为字符串,对于日期,/ 后面的数字就截断

3.Number() 强制转换为数字

小结:

  • undefined , 有字母的字符串或者加上数字 , 转换为NaN
  • null 、false, 空字符串, 转换为0
  • true 转换为 1
  • 数字类型 , 纯数字的字符串 , 转换为数字本身

4.Boolean()强制转换为布尔型 true/false

注意点:

  • 任何对象转布尔,均为true
  • 返回值为false:在js中,只有0、-0、NaN、""、false、null、undefined
  • 在取反时,这些均为true

5.String() 转换为字符串

特殊
**NaN(包括自己)、null(除了自己)、undefined(除了自己)跟任何东西都不相等 **

== 和 === 之间的区别

== 两边值类型不同的时,先进行类型转换,再比较值
=== 不会做类型转换,类型不同的一定不相等

== 所做的类型转换过程:

  • 如果不同类型进行比较时,先进行类型转换
  • 如果比较的是 null 或 undefined,如果是,返回 true
  • 先判断两者类型是否为 number 和 string , 如果是, 就将字符串转换为 number
  • 先判断两者中是否有 boolean, 如果是,,就将 boolean 转换为 number 之后再进行判断
  • 先判断两者中一方是否有 object ,如果另一方有 string、number,如果是,将 object转为原始类型再进行判断

经典面试题:[] == ![] 结果为什么为true
分析:

  • 首先 ! 运算符优先级最高,![] 会被转换为false,[] == false
  • [] == false ,false为bollean,因此就将false转为数字类型就为0,[] == 0
  • 将数组转为原始类型,调用数组的 toString() 方法,将 [] 转为空字符串,’’ == 0
  • 因为0为数字类型,就要将空字符串转为 0,再做比较,所以0 == 0
  • 两边均为数字类型相等,所以0==0 为true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值