走进前端——JavaScript(2)_类型检测

前言

作者:迷途の羊 
在这里分享学习自己的经历,希望可以帮助到初学前端的旁友
成为一个更好的前端开发者
大学在读前端菜鸡  若文中有误,感谢指正

DAY6 JavaScript测定数据类型、操作符*

JavaScript测定数据类型

首先,我们介绍一下JavaScript的数据类型:JavaScript的数据类型分为两种,一种是基本数据类型,一种是引用数据类型
基本数据类型有:number,string,null,undefined,boolean,symbol;他们的值都是存放在中,因为他们大小是固定的,而且是经常都会被使用到的,创建方法一般来说为let x = ‘迷途の羊’,直接赋值即可,所以存放在栈中更容易的对他们进行存取操作。
引用数据类型有:object,math,function,string,number,regexp,date,array等均为引用数据类型,引用数据类型的大小是不固定的,创建方法一般来说为let x = new Object()//或其他,引用数据类型均存放在中,因为他们大小不固定,而且大多为持久化数据,它们的值都是对象
我们会发现,在基本数据类型和引用数据类型中均有string,number,由此可以探讨一下,引用数据类型和基本数据类型到底如何区分呢?下面介绍几个关键字:

  1. typeof
    typeof可以清晰的判别基本数据类型,示例如下:
        let a = 1,
            b = 'zy',
            c = true,
            d = undefined,
            e = null,
            f;
        console.log(typeof a)
        console.log(typeof b)
        console.log(typeof c)
        console.log(typeof d)
        console.log(typeof e)
        console.log(typeof f)

在这里插入图片描述由此可见,typeof可以判断基本数据类型,注意:null的typeof为object。还可以看出,当使用var或let但未赋值时,默认值为undefined

    let g = new Number(2)
    console.log(typeof g)

在这里插入图片描述可见,即便是给g赋值一个Number对象,也只能判断出它为object!

  1. instanceof

instanceof可以清楚的判断引用数据类型,示例如下:

        let a = new Object(),
            b = new String('zy'),
            c = new RegExp(/[0-9]/),
            d = new Number(1),
            e = new Date(),
            f = {};
        console.log(a instanceof Object)


        console.log(b instanceof Object)
        console.log(b instanceof String)

        console.log(c instanceof Object)
        console.log(c instanceof RegExp)

        console.log(d instanceof Object)
        console.log(d instanceof Number)

        console.log(e instanceof Object)
        console.log(e instanceof Date)

        console.log(f instanceof Object)

在这里插入图片描述
我们这个时候可以发现一些细节 : Number、String等判断它是否属于Object时均是true,可以发现,他们均是从Object继承下来的(其实instanceof是判断某个对象的原型链上是否有instanceof右边的对象名)。
然而,他无法确定基本数据类型,示例如下:

        let a = 1,
            b = 'zy'

        console.log(a instanceof Object)
        console.log(a instanceof Number)

        console.log(b instanceof Object)
        console.log(b instanceof String)

在这里插入图片描述可见,即便是检测对应的对象也无法检测出正确的数据类型。
综合可述,在检测基本数据类型和引用数据类型要区分使用不同的方法

  1. Object.prototype.toString.call()
    该方法可以精确判断出数据类型
        var toString = Object.prototype.toString;
        console.log(toString.call(1));                 
        console.log(toString.call(true));              
        console.log(toString.call('zy'));              
        console.log(toString.call([]));                
        console.log(toString.call({}));                
        console.log(toString.call(function () { }));   
        console.log(toString.call(undefined));         
        console.log(toString.call(null));   

在这里插入图片描述

JavaScript操作符

js的操作符和c语言等其他语言大同小异,有一元操作符,位操作符,布尔操作符,指数操作符,相等操作符等。
关于相等操作符的区别是最大的,在这里细讲一下相等操作符:
相等操作符有这几种(大致来说分为相等和全等):

    console.log(1 == '1')
    console.log(1 != '1')
    console.log(1 === '1')
    console.log(1 !== '1')           
    console.log(null == undefined)
    console.log(null === undefined)

在此大家可以停一下,思考一下上方代码的运行结果
.
.
.
分割处
.
.
.
结果如下
在这里插入图片描述

现在疑问就来了:
为什么1 == '1'结果会是true呢,因为在JavaScript中的 '=='会自动进行类型转换,也就是说他们在比较时进行类型转换
最后发现1 == 1,所以结果为true。
再次注意:null == undefined为true!

下期内容

JavaScript上下文作用域和垃圾回收

**章末语**
前端容易入门,但是需要持续不断的学习,更新自己的知识
千里之行,始于足下
喜欢文章的话可以动动小手点个赞和关注呀~~
长期更新......

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
THE END
分享
二维码

)">
< <上一篇
下一篇>>