null
得到检测错误是历史遗留问题,在 JS
的最初版本中使用的是 32 位系统,为了性能考虑使用低位存储变量的类型信息,000
开头代表是对象然而 null
表示为全零,所以将它错误的判断为 object
。类型 | 结果 |
---|---|
String | "string" |
Number | "number" |
Boolean | "boolean" |
Undefined | "undefined" |
Object、Array、RegExp、null、Date、Error | "object" |
Function | "function" |
Symbol(ES6新增) | "symbol" |
BigInt(ES11新增) | "bigint" |
BigInt
表达。let x1 = 34.00
let x2 = 34
let x3 = 123e5
let x4 = 123e-5
let x5 = new Number(123)
typeof NaN
为 Number。typeof NaN === "number" // true
// NaN 同任何数比较均为false
NaN === NaN // false
isNaN("0") // false
isNaN("ssss") // true
n
的方式定义一个 Bigint 或者调用函数BigInt()
但不包含new
运算符,其不可以使用 new
关键字初始化。BigInt
是JavaScript中的一个新的原始类型,可以用任意精度表示整数。使用BigInt
,即使超出JavaScript Number
的安全整数限制,也可以安全地存储和操作大整数。let x1 = 123n
let x2 = BigInt(123)
Math
对象中的方法。Number
实例混合运算,两者必须转换成同一种类型。在两种类型来回转换时要小心,因为BigInt
变量在转换成Number
变量时可能会精度丢失。toString
方法获得其对应的字符串的值。let s1 = "qwe"
let s2 = new String("sad")
let s3 = 'sdg'
let s4 = `dbs`
({}).toString() // [object Object]
(123).toString() // "123"
// 字符串与其他类型相加会发生奇怪的事情
{} + '' // 0
[] + '' // ''
Boolean(null) // false
Boolean(undefined) // false
Boolean(4) // false
let a = null
undefined == null // true
undefined === null // false
let a = undefined
null == undefined // true
null === undefined // false
ES5 的对象属性名都是字符串,这容易造成属性名的冲突。比如,你使用了一个他人提供的对象,但又想为这个对象添加新的方法(mixin 模式),新方法的名字就有可能与现有方法产生冲突。如果有一种机制,保证每个属性的名字都是独一无二的就好了,这样就从根本上防止属性名的冲突。这就是 ES6 引入Symbol
的原因。
Symbol
,表示独一无二的值。Symbol()
函数生成。let s = Symbol();
typeof s
// "symbol"
let s1 = Symbol('foo');
let s2 = Symbol('bar');
s1 // Symbol(foo)
s2 // Symbol(bar)
s1.toString() // "Symbol(foo)"
s2.toString() // "Symbol(bar)"
特性
let a={}; a.x=1;
function
参数是值传递,不能修改引用判断
Object.prototype.toString.call
检测最为精准let a = function (){}
let b = []
let c = {}
Object.prototype.toString.call(a) // [object Function]
Object.prototype.toString.call(b) // [object Array]
Object.prototype.toString.call(c) // [object Object]
typeof a // function
typeof b // object
typeof c // object
let x1 = {}
let x2 = new Object()
// 基本类型的包装类 使用typeof判为object
let x3 = new String()
let x4 = new Number()
typeof x1 // "object"
typeof x2 // "object"
typeof x3 // "object"
typeof x4 // "object"
var funA = function(){
console.log("我是匿名函数保存在变量funA中");
}
var funB = [function(){
console.log("我是匿名函数保存在数组funB中");
}]
var funC = {
method:function(){
console.log("我是匿名函数保存在对象funC中");
}
}
// 函数的调用
funA(); // 普通函数的调用
funB[0](); // 函数存入数组中的调用
funC.method(); // 对象调用方法的使用
⭐以上就是本文的全部内容啦,如果对你有帮助请给我点个赞吧
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。