JS中的数据类型

一.数据类型

1.原始数据类型:Null,Undefined,Boolean,String,Number

2.引用数据类型:Object,Array,Function

二.面试常考

1.Null和Undefined的区别

Undefined:未定义,表示一个变量不含值,非人为因素

Null:空对象,用来清空变量,人为因素

相同点:

if判断中都将会被转换成false

不同点:

  • Number转换的值不同:Number(null)输出为0,Number(Undefined)输出为NaN
  • Null表示一个值被定义了,但是为空

作为函数的参数,表示该参数不为对象

作为对象原型链的终点

定义一个值为null是合理的,但是定义一个值为undefined不合理

  • Undefined表示缺少值,即应该有值但是还没有被定义

变量声明但是还未赋值

函数没有返回值,默认返回return

调用函数时,应该提供的参数没有提供

对象没有赋值属性,该属性值等于undefined

2.判断数据类型的方法

(1)typeof,返回相对应的数据类型

<script> 
    var a = null; 
    var b; 
    var c = 1; 
    var d = "abc"; 
    var e = true; 
    var f = function(){ }; 
    var g = ["1","2"]; 
    var h = { a : 123 }; 
    console.log(typeof(a));//object 
    console.log(typeof(b));//undefined 
    console.log(typeof(c));//number 
    console.log(typeof(d));//string 
    console.log(typeof(e));//boolean 
    console.log(typeof(f));//function 
    console.log(typeof(g));//object 
    console.log(typeof(h));//object 
</script>

null,Array,object --- > object

(2)instanceof,返回true或者false

   var f = function(){

    };
    var g = ["1","2"];
    var h = {
        a : 123
    };
   console.log(f instanceof Function);//true
   console.log(g instanceof Object);//true
   console.log(h instanceof Object);//true

instanceof操作符只能用来判断引用型的数据类型

(3)constructor,返回true或者false

    console.log((1).constructor === Number);//true
    console.log(("1").constructor === String);//true
    console.log((true).constructor === Boolean);//true
    //console.log((null).constructor === Null);//报错
    //console.log((undefined).constructor === Undefined);//报错
    console.log(([]).constructor === Array);//true
    console.log((function(){}).constructor === Function);//true
    console.log(({}).constructor === Object);//true

(4)Object.prototype.toString.call()

var a = Object.prototype.toString;
console.log(a.call("aaa"));// [object String]
console.log(a.call(1));//[object Number]
console.log(a.call(true));//[object Boolean]
console.log(a.call(null));//[object Null]
console.log(a.call(undefined));//[object Undefined]
console.log(a.call([]));//[object Array]
console.log(a.call({}));//[object Object]
console.log(a.call(function(){}));//[object Function]

3.强制类型转换

(1)字符串类型

  • 三种值类型(字符串,数组,布尔值)都具有toString方法,能将自身转化为字符串
<script>
    var a = 1;
    var b = "123";
    var c = true;
    var d = [1,2,3];
    console.log(a.toString());//1
    console.log(b.toString());//123
    console.log(c.toString());//true
    console.log(d.toString());//[1,2,3]

</script>
  • String()强制类型转换与toString的不同之处是可以将null和undefined也转换成字符串
  • 隐式转换("+")

双目运算符,只要其中一个是string类型,表达式就是是string类型(拼接)

(2)数字类型

  • Number()方法

会将尽可能传入的值转换成数字

console.log(Number(''));//0
console.log(Number('1'));//1
console.log(Number([]));//0
console.log(Number(["1"]));//1
console.log(Number(["1","2"]));//NaN
console.log(Number(function(){console.log(1)}));//NaN
console.log(Number({"a": 1}));//NaN
console.log(Number(null));//0
console.log(Number(undefined));//NaN
console.log(Number(true));//1
console.log(Number(false));//0
console.log(Number('100px'));//NaN
  • parseInt()方法

将字符串转换成整数,parseInt(a,10)第二个参数表示十进制,不是字符串会返回NaN

console.log(parseInt("123"));//123
console.log(parseInt("100px"));//100
console.log(parseInt("1.23"));//1
console.log(parseInt(["123"]));//123
console.log(parseInt(123));//123
console.log(parseInt(["a"]));//NaN
console.log(parseInt(["a","b"]));//NaN
console.log(parseInt({"a":1}));//NaN
console.log(parseInt(function(){}));//NaN
  • parseFloat()方法

与parseInt一样,但是会保留第一位小数

(3)布尔值类型

Boolean(value)会将值转化成布尔型

4.比较规则

  • 对象和布尔值

先将对象转换成字符串,再转成数字,直接将布尔值转换成数字

console.log([] == true);//false 先将[]转成字符串'',在转成数字是0,true转成数字是1
  • 对象和字符串比较

对象和字符串比较先将对象转成字符串,再比较

console.log([1,2,3] == "1,2,3");//true
  • 对象和数字比较

先将对象转成字符串,再转成数字

console.log([1] == 1)//true
  • 字符串和数字比较

先将字符串转成数字,再比较

console.log("1" == 1)//true
  • 字符串和布尔值比较

将字符串和布尔值都转成数字

console.log("1" == true);//true
  • 布尔值和数字

将布尔值转成数字

console.log(true == 1)//true

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值