JavaScript高级-数据类型

1.数据类型

1.定义

1.分类

1.基本(值)类型

  • String:任意字符串
  • Number:任意的数字
  • Boolean:true/false
  • undefined:undefined
  • null:null

2.对象(引用)类型

  • Object:任意对象
  • Function:一种特别的对象(可以执行)
  • Array:一种特别的对象(通过数值下标寻找,内部数据是有序的)
2.判断
  • typeof:可以判断:undefined/Number/String/Boolean类型以及Function类型

  • instanceof:判断对象的具体类型,返回值是布尔值

  • ===:可以判断undefined/null类型

疑问:为什么typeof方法不能判断null类型?

typeof null 返回一个object,typeof null返回Object是一个不能去修正的的bug,因为这会破坏现有的代码。
第一代JavaScript引擎中的JavaScript值表示为32位的字符。最低的3位作为一种标识,表示值是对象、整数、浮点数或者布尔值。
对象的标示是000。而为了表现null值,引擎使用了机器语言NULL指针,该字符的所有位都是0。而typeof就是检测值的标志位,这就是为什么它会被认为是一个对象的原因。

2.示例

定义基本类型和对象类型

	const a  = new Number(2)
    const b = new String(3)
    const c = new Boolean('assa')
    const d = undefined
    const e = null
    console.log(a); //2
    console.log(b); //'3'
    console.log(c); //true 当值为0或false时打印false,其余有效值均为true
    console.log(d); //undefined
    console.log(e); //null

    const obj = new Object()
    const fun = new Function()
    const array = new Array()
    console.log(obj); //{}
    console.log(fun); // ƒ anonymous(){}
    console.log(array);//[]

判断基本类型和对象类型(定义的变量与上例相同)

 	//判断基本类型和对象类型
    console.log(typeof a);//'number'
    console.log(typeof b);//'string'
    console.log(typeof c);//'boolean'
    console.log(typeof d);//'undefined'
    console.log(typeof e);//'object'
    console.log(typeof obj);//'object'
    console.log(typeof fun);//'function'
    console.log(typeof array);//'object'

	console.log(obj instanceof Object);//true
    console.log(fun instanceof Function);//true
    console.log(array instanceof Array);//true

	console.log(d === undefined);//true
    console.log(e === null);//true

    const obj1 ={
        b1:[1,'abc',console.log],
        b2:{name:'zzm',age:'19'},
        b3:function(){
            return '我是一个函数'
        },
        b4:function(){
            return function(){
                return '我是b4函数中的函数'
            }
        }
    }
    console.log(window.console.log === obj1.b1[2]);//true
    obj1.b1[2]('输出xxx')//与console.log('输出xxx')是一样的
    console.log(obj1.b2.name);//'zzm'
    console.log(obj1.b3());//'我是一个函数'
    console.log(obj1.b4()());//'我是b4函数中的函数'  使用函数需要在 函数名+'()' ,b4函数的返回值仍是一个函数,所以要使用obj1.b4()+'()'来调用这个嵌套的函数

3.相关问题

1.undefined与null的区别?

  • undefined代表定义了但没有赋值
  • null代表定义且赋值了,值为null

2.什么时候给变量赋值为null?

  • 初始赋值,表明将要赋值类型为对象
  • 结束前,让对象成为垃圾对象(被垃圾回收器回收
const obj = null//初始赋值表明将要赋值为对象
obj = {a:1,b:2}//使用时将obj赋值为对象
obj = null//结束前,让对象成为垃圾对象(被垃圾回收器回收

3.严格区别变量类型·与数据类型?

  • 数据的类型
    • 基本类型
    • 对象类型
  • 变量的类型(变量内存值的类型)
    • 基本类型:保存的就是基本类型的数据,例如const a=1
    • 引用类型:保存的是地址值,例如const b = {a:1},b保存的是对象在内存中的地址值,而不是对象本身

在这里插入图片描述

我们将蓝色内存块中的对象数据赋值给a时,a中保存的实际上是对象的地址值

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值