JavaScript冷知识2

前言

书接上文,这几天对一些比较冷门的知识点又做了一些总结,在这里写下来,避免遗忘。

1.对象防篡改

可以防止对指定的对象进行误操作

#开启防篡改
var obj= {
    a:1
}
obj.__proto__.fn=function (){
return 1
}
Object.preventExtensions(obj)
obj.name = 'test';
console.log(obj)
#输出
{
    a:1,
    __proto__:{
        fn: ƒ ();
    }
}

#关闭防篡改
var obj= {
    a:1
}
obj.__proto__.fn=function (){
return 1
}
//Object.preventExtensions(obj)
obj.name = 'test';
console.log(obj)
#输出
{
    a:1,
    name: "test"
    __proto__:{
        fn: ƒ ();
    }
}

复制代码

2.判断对象是否可扩展

Object.isExtensible()方法可以用来判断对象是否可扩展,可以判断Object.preventExtensions,Object.seal 或 Object.freeze定义的对象

//用以判断对象是否可扩展
Object.isExtensible(obj)

1.
var obj= {a:1}
Object.preventExtensions(obj)
console.log(Object.isExtensible(obj))
//输出
false

2.
var obj= {a:1}
Object.seal(obj);
console.log(Object.isExtensible(obj))
//输出
false
复制代码

3. NaN的类型是数字

var a = 1 * 'a';
console.log(a)
console.log(typeof a)
//输出
NaN
number
复制代码

4.数组快速拉平

var a = [1,2,[3,4]];
a.flat();
console.log(a);
//输出
[1,2,3,4]

flat函数默认拉平1级
例:
[1,2,[3,[45]]].flat()
//输出
[1, 2, 3, [45]]
可以使用数字指定拉平层级,或者使用Infinity拉平任意层级
[1,2,[3,[45]]].flat(Infinity)
//输出
[1, 2, 3, 45]

复制代码

5.Json.Stringify在遇到undefined、function和symbol时

JSON.stringify(undefined)
//输出
undefined
JSON.stringify(function(){})
//输出
undefined
JSON.stringify(Symbol)
//输出
undefined
JSON.stringify([1,2,undefined,1])
//输出
"[1,2,null,1]"
JSON.stringify({a:1,b:undefined})
//输出
"{"a":1}"
复制代码

6.快速获取当前时间的时间戳

+ new Date()
//输出 单位为毫秒
1613719180196

解析:
+ new Date() 会进行隐式类型转换,调取对象的valueOf方法,等价于下方方法
new Date().valueOf()
复制代码

7.parseInt跟Number区别

var a = 123+'abc';
console.log(Number(a))
console.log(parseInt(a))
Number遇到非数字会返回NaN
parseInt遇到非数字会停止
复制代码

9.伪数组转为数组

Array.prototype.slice.call()

例:
function test(){
    let args = Array.prototype.slice.call(arguments);
    console.log(args);
}
test(1,2,3)
//输出:
[1, 2, 3]

复制代码

10.parseInt第二个参数

var arr = ['1', '2', '3'].map(parseInt)
console.log(arr)
//[1, NaN, NaN]

解析:
等价于
var arr  =  ['1', '2', '3'].map((item,index)=>{
    parseInt(item,index)
})

1.
parseInt(1,0) 转为10进制
2.
parseInt(2,1) 转为1进制,2大于1所以返回NaN
3.
parseInt(3,2) 转为2进制,3大于2所以返回NaN

第一个参数为数值,第二个为进制数
复制代码
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享