Object
Object.assign() 可能是用的最多的方法了吧...
函数只是一个可以执行的值, 除此以外没有什么特别之处
我姓范叫范可申;
函数声明
function a() {
alert(a.name) // 没有return或者return后面没有值, 返回值是undefined,
}
function sum(n1, n2 = n1) {
return n1 + n2
}
sum(10)
函数表达式
var a = function () {}
匿名函数(拉姆达函数)
函数提升
if(a) {
function a(){}; // 函数声明提升了,所以不要这样写
var a = function() {} // 这样写没有问题
}
arguments.callee
var factorial = (function f(num) {
if(num <= 1) {
return 1;
} else {
return num*f(num - 1);
}
})
箭头函数的this指向它所在的环境,(如果环境还是箭头函数, 则继续向上)
箭头函数没有prototype 返回值 undefined
- 重复设置一个属性会报错
let obj = {
};
Object.defineProperties(obj, {
name: {
value: 'a'
}
})
console.log(obj);
Object.defineProperties(obj, {
name: {
value: 'b'
}
})
Q1. encodeURI 和 encodeURIComponents区别
URI - Uniform Resource Identifiers(通用资源标识符), 用UTF-8替代无效的字符, 让浏览器理解
encodeURI() 空格变为%20 解码 decodeURI
encodeURIComponent() 会转换所有的非标准字符 decodeURIComponent 转换查询串的参数
用于替换es3中的escape() unescape()方法, 因为这两个只能编码ASCII字符
Math
Math.round(Math.random()*5) + 10 // ceil floor
Math.toFixed(2)
Math.pow(2, 4)
Math.sqrt(4) 平方根
!isNaN()
Number.isNaN() 区别 isNaN
Number.isInteger()
Date
Date.now()
+new Date()
new Date().getTime()
Date.parse()
深拷贝
JSON.parse(JSON.stringify(obj)) // JSON
var b = $.extend(true, [], obj) // jquery
function deepClone(obj){
let newObj = Array.isArray(obj)?[]:{};
if(obj && typeof obj==="object"){
for(key in obj){
if(obj.hasOwnProperty(key)){ //判断是否是实例属性, 而不在原型上找
//判断ojb子元素是否为对象,如果是,递归复制
if(obj[key]&&typeof obj[key] ==="object"){
newObj[key] = deepClone(obj[key]);
}else{
//如果不是,简单复制
newObj[key] = obj[key];
}
}
}
}
return newObj;
}
数组降维/扁平化
递归或者转字符串
arr=[[1,3,4,5],[2,3,5]];
var arr1=[];
function addNum(e){
e.forEach(function(e){
if(typeof(e)!="number"){
e.forEach(function(e){
addNum(e);
})
}else{
arr1.push(e);
}
})
}
arr.forEach(function(e){
addNum(e);
});
let arr=[2,3,3,4,[2,3,4,[13,3,[3,4,6],4]]];
String(arr).split(',')
var arr1=[];
let arr=[2,3,3,4,[2,3,4,[13,3,[3,4,6],4]]];
for(var i=0;i<arr.length;i++){
arr1[i]=eval(arr[i]);
}
console.log(arr1); //[2, 3, 3, 4, 2, 3, 4, 13, 3, 3, 4, 6, 4];