javascript的小问题
- swicth语句中变量与case子语句是 ===进行匹配
- 严格模式 :引入 use strict指令触发,常见限制
- 变量必须先声明再使用
- 函数默认this指向undefind 而不是window
- delete运算符删除不可删除的属性会报错
- 禁止使用0开头的8进制;
- 禁止使用with语句
- null和undefined的区别
- undefined表示未定义的值,null表示一个空对象
- 通过Number转化,undefined会变成NaN,null会变成0
- typeof和instanceof的区别
- typeof用于检测基本类型,instanceof用于检测对象之间的关系
- typeof执行完后会返回当前类型的小写字符串。instanceof返回的是布尔类型
- typeof只需要一个操作数,instanceof需要两个,且左操作数不能是基本类型,必须是对象,右操作数必须是函数
- 对typeof检测类型为Object可以进一步检测具体类型,可使用基础对象Object原型上的toString().call进一步检测
- void会忽略操作数的计算结果返回undefined,NaN表示一个不是数字的数值
- in操作符可以检测属性是否在对象中,可以是自身的也可以是继承的
- hasOwnProperty()可以检测属性是否在自身对象中,不考虑继承
- isPrototypeOf()用于检测该对象是否存在于指定的原型链中
- instanceof用于检测构造方法的原型是否在指定对象的原型链中
- eval()可以执行一段字符串中的脚本,也就是将字符串编译
- 将in和hasOwnProperty组合使用可以检测一个属性是否是继承属性
- 数组扁平化
var arr=[1,[2,[3,4],5],6] console.log(arr); arr=arr.toString() console.log(arr.split(',')); arr=arr.split(',').map((v1,index,array)=>{ return +v1 }) console.log(arr);
- 函数声明可以变量提升、
- 日期函数相关操作
- 两个日期对象相减得到时间间隔的毫秒数
- RegExp对象
- test(字符串),判断正则表达式对象和字符串是否匹配,返回布尔值
- 当正则表达式包含g的时候,每次调用test方法都会更新lastIndex的值,也就是检索的起始位置
-
//替换占位符 //如我的名字{0} ,和”mary“ function strFormat(format,arr){ if(argument.length<2) return format for(var key in arr){ var value =arr[key]; if ( undefined!= value) { format=format.replace( new RegExp ('\\{"+key+"\\}","gm"),value) } } }
- 数组内置方法:
- sort();排序,可传递回调函数按指定规则排序,回调函数参数 x y,返回值大于0,x会移动到y后面
- reduce();缩减数组,将数组元素计算成一个值返回,回调函数接受4个参数:累计值、当前元素、当前元素索引和原始数组
- splice();用于删除插入或替换,第一参数表示开始位置,第二参数表示操作元素数量,第三参数开始表示要导入的值,改变原数组,返回被删除的元素
- slice();用于提取元素,参数为起始位置和结束位置
- map();用于迭代修改元素的值,传递回调函数参数表示元素的值和元素下标,返回值会更新元素值
- indexOf();找到元素的起始位置;lastIndexOf()则反向查找
- 数组去重方法:假如是多重数组,则先使用toString扁平化,再通过创建辅助对象和新数组,遍历旧数组,利用对象属性的唯一性,可以做到map的效果,把没有遇见的数组元素加入新数组
- 函数预编译问题:首先函数内形参和所有变量声明,默认undefined。实参于形参相统一,也就是带入实参。函数内的函数声明(区分函数表达式),会覆盖变量声明。按顺序执行函数代码。
浪波激泥