js基础 - 数据类型

1、js数据类型分类

  • 基本类型(值类型)
    字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、Symbol。
    注:Symbol 是 ES6 引入了一种新的原始数据类型,表示独一无二的值。
  • 对象类型(数据类型)
    对象(Object–任意对象)、数组(Array—特殊的对象,数值下标、内部是有序的)、函数(Function—特殊的对象,可以执行)

2、js数据类型判断

【typeof】-------格式:typeof 变量--------输出的是对应类型的小写字符串形式( ‘undefined’, ‘number’,‘string’,‘boolean’,‘function’)

  • 可以判断undefined、数值、字符串、布尔值、函數
let a
console.log(a,typeof a,typeof a === 'undefined',a === undefined,'undefined' === undefined)
//undefined,'undefined',true,true,false
let b = 'aaa'
console.log(b,typeof b,typeof b === 'string')
//'aaa','string',true
let c = 1
console.log(c,typeof c,typeof c === 'number')
//1,'number',true
let d = true
console.log(d,typeof d,typeof d === 'boolean')
//true,'boolean',true
console.log(typeof console.log === 'function')
//true
  • 不可以判断null与object、object与array
let a = null
console.log(typeof a,typeof a === 'object') //'object',true
//null的类型属于object,如果使用typeof区分则无法区分null与普通对象
let b = []
console.log(b,typeof b,typeof b === 'object')//'object',true
//数组array的类型属于object,如果使用typeof区分则无法区分null与普通对象

【instanceof】-----格式:实例对象 instanceof 构造函数 --------输出的是对应类型的判断 true / false

  • 判断对象的具体类型(Object, Array,Function)
let b1 = {
   b2: [ 1 , 'abc' , true , console.log ],
   b3: function(){
     return function(){
        return 'meimei'
     }
   }
}

console.log(b1 instanceof Object ,b1 instanceof Array,) // true,false
console.log(b1.b2 instanceof Object ,b1.b2 instanceof Array,) // true,true
console.log(b1.b3 instanceof Object ,b1.b3 instanceof Function,) // true,true
console.log( typeof b1.b2, typeof b1.b3)  // 'object','function'
console.log( typeof b1.b2[3])  // 'function'
console.log( b1.b3, b1.b3()) // 函数,无打印信息
console.log( b1.b3()() ) // 'meimei'

【=== // ==】-----比较两个数据是否相同,返回true / false

  • **=== **判断两个数据是否完全相同,多用于undefined以及null的判断
  • *== *判断两个数据的值是否相同
  • 在比较的时候, **== **会发生数据类型转换,而 **=== **不会发生类型转换,也就是说,对于 **=== **的话,会先判断是否是同一个类型,如果不是的话,直接返回false,而 **== **的话呢,如果不是同一个类型,则会先根据一些规则,把他们转换成同种类型的,然后再进行比较。
    console.log(undefined===null,undefined==null)  //false,true    undefined== null是对的
    console.log(undefined===false,undefined==false)  //false,false  
    console.log(undefined===0,undefined==0)  //false,false
    console.log(undefined==='',undefined=='')  //false,false
    console.log(null===0,null==0)  //false,false
    console.log(null===false,null==false)  //false,false
    console.log(null==='',null=='')  //false,false
    console.log(0==='',0=='')  //false,true                       0==''是对的
    console.log(0==='0',0=='0')  //false,true                  0=='0'是对的
    console.log(0===false,0==false,'0'==false)  //false,true ,true  0==false,'0'==false是对的
    console.log(''===false,''==false)  //false,true         ''==false是对的

3、强制数据类型转换

强制转化:是程序员人为的将数值或者变量存储的数据数值,转化为指定的数据类型
注:所有的强制转化,都不会改变变量中存储的原始数据内容

  • 其他类型转为string类型
    方法1:调用toString()方法,不会影响到原变量,是在原变量的基础上进行转化,将转换结果返回
    注:null与undefined没有toString()方法,object需要使用JSON.stringify()
let a = 1
console.log(a,a.toSring())
//1,'1'
let b = true
console.log(b,b.toSring())
//true,'true'
let d = [1,2,3]
console.log(d,d.toSring())
//[1,2,3],'1,2,3'
console.log(undefined.toString())
//tUncaught TypeError: Cannot read property 'toString' of undefined at <anonymous>:1:11
console.log(null.toString())
//Uncaught TypeError: Cannot read property 'toString' of null at <anonymous>:1:6
let c = {name:'name1'}
console.log(c,JSON.stringify(c))
//1,"{"name":"name1"}"

方法2:调用String()函数,并将被转换的数据作为参数传递给函数。
注意:使用String()函数做强制类型转换时,对于Number和Boolean实际上就是调用的toString()方法,
但是对于null和undefined,就不会调用toString()方法,而是将null直接转换为字符串"null",将undefined直接转换为字符串"undefined"。

let a = 1
console.log(a,String(a))
//1,'1'
let b = true
console.log(b,String(b))
//true,'true'
let d = [1,2,3]
console.log(d,String(d))
//[1,2,3],'1,2,3'
console.log(undefined,String(undefined))
//undefined,'undefined'
console.log(null,String(null))
//null,'null'
  • 其他类型转为Number类型
    方法1:调用Number()函数
    字符串转换成数字时,如果是纯数字的字符串,直接将其转换成数字;如果字符串中有非数字的内容,则转换为NaN.
    如果字符串是一个空串或者是一个全是空格的字符串,则转换为0。null转换成number类型为0;undefined转换为number类型为NaN
let a ='1',b = 'nihao'
console.log(a,Number(a),b,Number(b))
//'1',1,'nihao',NaN
let c='',d='    '
console.log(c,Number(c),d,Number(d))
//0,0
let e = [1,2,3]
console.log(e,Number(e))
//[1,2,3],NaN
console.log(Number(undefined),Number(null))
//NaN,0
let f = {name:'name1'}
console.log(Number(f))
//NaN

方法2:针对字符串

  • Number()、parseInt() 和 parseFloat() 的区别.
  • parseInt()或parseFloat()把一个字符串转换成Number,可以将一个字符串中的有效整数内容取出来然后转换成Number;
  • 如果对非String使用parseInt()或parseFloat(),parseInt()或parseFloat()会先将其转换为String然后再操作。
let a = 'sss123ddd',b='111sssdd22fff'
console.log(parseInt(a),parseInt(b),parseFloat(a),parseFloat(b))
//NaN,111,NaN,111
  • **将其他数据类型转换为Boolean类型 **
    使用Boolean()函数即可

4、undefined与null的相关知识

  • undefined与null的区别
    undefined:定义未赋值
    null:定义并赋值,且值为null
let a ;
let b = null;
console.log(a,b)
//undefined,null
  • 什么时候给变量赋值为null
    null是基本数据类型,但是typeof(null)----object,比较矛盾
    *初始赋值,表明将要赋值为对象
    *结束前,让指向的对象成为垃圾对象被垃圾回收器回收
let b = null; //初始赋值为null,表明将要赋值为对象
b=[123,345];  //给对象赋值
b=null; //让b指向的对象成为垃圾对象(被垃圾回收器【存在浏览器内核中】回收)
  • 严格区分数据类型和变量类型

数据类型:

基本类型
对象类型

变量类型(变量内存中值的类型):

基本类型:保存的是基本类型的数据
引用类型:保存的的是地址值

let b = null; //初始赋值为null,表明将要赋值为对象
b=[123,345];  //给对象赋值
b=null; //让b指向的对象成为垃圾对象(被垃圾回收器【存在浏览器内核中】回收)
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值