写在前面:该文章用于笔者整理日常学习到的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数组相关函数总结
下列函数不改变原数组
- reduce 返回值类型为 number,用于数组累加
- map 返回值类型为 arrray,用于数组映射
- filter 返回值类型为 array,用于数组过滤
- foreach 返回值类型为 void,用于遍历数组
- every 返回值类型为 boolean,用于判断数组所有元素是否符合条件
- some 返回值类型为 boolean,用于判断数组中是否有元素满足条件
4.toFixed
该方法采用银行家算法:四舍六入五考虑 五后有数就进一 五后无数看奇偶 为奇则进一 为偶则不尽
总结:在涉及金额时,尽量不要用toFixed方法
5.判断对象是否有某个属性
- 通过 'in'来判断
- 通过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)