你需要知道的JavaScript知识点,持续更新中......

130 阅读3分钟

写在前面:该文章用于笔者整理日常学习到的js知识点,整理知识点有利于加深印象,文章包括例题输入输出,例题知识点分析和常用知识点归纳总结......

1.关于definedProperty

输入:

let obj={
            name:'阿列克塞'
        }
Object.definedProperty(obj,'gender',
    {
        value:'man',
    })
console.log(obj.gender)
console.log(Object.keys)

输出:

man
['name']

知识点分析:

Object.definedProperty(需要添加属性的对象,属性名,属性的属性)
let obj={
            name:'阿列克塞'
        }
Object.definedProperty(obj,'gender',
    {
        value:'man',
        configurable:true//是否可以通过delete删除属性
        writable:true         //是否可以修改新增属性的属性值
        enumrable:true        //是否可以枚举  Object.keys,Object.values
     }
     )

2.var a=1和a=1的区别

输入:

var a=18
b=81
console.log(delete a)
console.log(delete b)
console.log(window.a)
console.log(window.b)

输出

false
true
18
81

知识点分析:
加不加var/let/const,区别在于configurable
detele只能删除对象的属性
configurable为true代表可以通过delete删除属性

let a_info=Object.getOwnPropertyDescriptor('window',a)
let b_info=Object.getOwnPropertyDescriptor('window',b)
console.log(a_info)
//得到  {value:18,writable: true, enumerable: true, configurable: false}
console.log(b_info)
//得到  {value:81,writable: true, enumerable: true, configurable: true}

3.js数组相关函数总结

下列函数不改变原数组

  1. reduce 返回值类型为 number,用于数组累加
  2. map 返回值类型为 arrray,用于数组映射
  3. filter 返回值类型为 array,用于数组过滤
  4. foreach 返回值类型为 void,用于遍历数组
  5. every 返回值类型为 boolean,用于判断数组所有元素是否符合条件
  6. some 返回值类型为 boolean,用于判断数组中是否有元素满足条件

4.toFixed

该方法采用银行家算法:四舍六入五考虑 五后有数就进一 五后无数看奇偶 为奇则进一 为偶则不尽

总结:在涉及金额时,尽量不要用toFixed方法

5.判断对象是否有某个属性

  1. 通过 'in'来判断
  2. 通过hasOwnProperty来判断

代码如下:

let obj={
    name:'xujii',
    gender:'woman'
}
obj.__proto__.hobby='learn'
console.log('name' in obj);       //true
console.log('n' in obj);          //false
console.log('hobby' in obj);      //true
console.log("==========================");
console.log(obj.hasOwnProperty('name'));  //true
console.log(obj.hasOwnProperty('n'));     //false
console.log(obj.hasOwnProperty('hobby')); //false

总结:上述两种方法都能判断对象中是否有某种属性,但是in判断的是包括对象本身和其原型对象,而hasOwnProperty判断的是对象本身,不包括其原型对象。

6.关于slice和splice

代码如下:

let arr=[3,1,2,0,1,9,5,4,7,8]
console.log(arr.slice(-2,-1)); //返回[7]
console.log('xujii'.slice(0,4)); //返回xuji
console.log(arr.splice(1,3,999));//返回[1,2,0]
console.log(arr);//返回[3,999,1,9,5,4,7,8]
console.log('xujii'.splice(0,1));//报错

总结如下:

标题
slice返回截取的元素(数组),不改变原数组,字符串也可以调用该方法
splice返回删除的元素(数组),改变原数组(增删改查),字符串不能调用该方法

7.js的隐式数据转换

标题
转为number算数运算符:+ - * / ++ -- 比较运算符: > < >= <= != ==
转为string+
转为boolean!

注意点

//1.===和!==不存在隐式转换(==和!=存在隐式转换)
console.log('1'==1);  //返回true
console.log('1'===1);  //返回false
console.log('1'!=1);   //返回false
console.log('1'!==1);  //返回true

//2.特殊点
console.log(Number(undefined));  //返回NaN
console.log(Number(NaN));        //返回NaN
console.log(Number(null));       //返回0
console.log(undefined==null);    //返回 true
console.log(undefined===null);   //返回false
console.log(NaN==NaN);           //返回false  NaN不等于任何值,包括她本身

关于隐式转换的重点:===和!==不存在隐式转换

参考资料(例题)

你到底懂不懂JavaScript?来做做这12道面试题试试!
JS隐式数据类型转换 - 简书 (jianshu.com)
十分钟理解Object.defineProperty() - 掘金 (juejin.cn)