JS数据类型以及数据类型检测

/*
 * 数据类型分类
 *   1.原始值类型「俗称:值类型、基本数据类型」 
 *     + number  特殊:NaN(isNaN & Object.is)、Infinity
 *     + string
 *     + boolean 
 *     + null
 *     + undefined
 *     + symbol
 *       + 给对象设置唯一值属性「对象属性名的类型:字符串、Symbol」
 *       + Symbol.hasInstance/toStringTag/toPrimitive...
 *       + ...
 *     + bigint
 *       + Number.MAX_SAFE_INTEGER/MIN_SAFE_INTEGER  JS中的最大/最小安全数字
 *       + 数字后面加n就是bigint类型的中,例如:9007199254740991n,bigint值保证我们超过安全数字,计算也可以准确
 *       + 服务器返回超大数字,我们可以把其转换为bigint再进行运算;运算完的结果,变为字符串传递给服务器即可...
 *       + ...
 *   2.对象类型「俗称:引用数据类型」
 *     + 标准普通对象  {name:'zhufeng'}
 *     + 标准特殊对象  数组、正则、日期、错误...
 *     + 非标准特殊对象  原始值类型的值,基于构造函数模式,new出来的实例对象
 *     + 可调用/执行对象「函数对象」 function
 */

/* let sy = Symbol('BB'),
    a = {};
let obj = {
    [Symbol('AA')]: 100,
    [sy]: 200
};
obj[a] = 'zhufeng'; //obj["[object Object]"]="zhufeng"
console.log(obj[Symbol('AA')]); //undefined
console.log(obj[sy]); //200
console.log(Object.getOwnPropertySymbols(obj)); //[Symbol(AA),Symbol(BB)] 获取当前对象所有Symbol类型的私有属性
console.log(Object.keys(obj)); //["[object Object]"] 获取所有非Symbol类型的私有属性 */

/*
 * JS中的数据类型检测
 *   + typeof
 *     + 检测的结果是一个字符串,字符串中包含了对应的数据类型
 *     + 局限性「特点」
 *       + typeof null -> “object”
 *       + typeof检测对象类型,除函数对象返回“function”,其余返回都是“object”「不能细分对象」
 *       + typeof检测一个未被声明的变量,不会报错,而是返回“undefined”
 *       + ...
 *     + 底层处理机制
 *       + 所有的数据类型值,在计算机底层都是按照“二进制”来存储的「64位」
 *       + typeof检测数据类型,就是按照存储的“二进制值”来进行检测的:前三位是000的,都被认为是对象{如果对象内部实现了[[Call]]方法,则认为是函数,返回“function”},返回值是“object”...
 *       + typeof的处理性能相对好一些
 *       + ...
 *   + instanceof
 *   + constructor
 */
// console.log(typeof 1); //"number"
// console.log(typeof new Number(1)); //"object"

// Object.prototype.toString.call() 检测数据类型
//通过call指定Object.prototype对象中的toString方法的this
/*
console.log(Object.prototype.toString.call(123));    //[object Number]
console.log(Object.prototype.toString.call('123'));    //[object String]
console.log(Object.prototype.toString.call(undefined));    //[object Undefined]
console.log(Object.prototype.toString.call(true));    //[object Boolean]
console.log(Object.prototype.toString.call({}));    //[object Object]
console.log(Object.prototype.toString.call([]));    //[object Array]
console.log(Object.prototype.toString.call(function(){}));    //[object Function]
console.log(Object.prototype.toString.call(null));	//[[object Null]]
*/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值