-
Notifications
You must be signed in to change notification settings - Fork 0
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
(四)javascript高级程序设计: 引用类型 #4
Labels
Comments
提供俩个数组扁平化操作方法
let arr = [1, [2], [3, [4, [5]]]];
let flatten = (arr) => {
return arr.reduce(
(prev, next) => {
return prev.concat(Array.isArray(next) ? flatten(next) : next);
},
[]
);
}
flatten(arr); // [1, 2, 3, 4, 5]
let arr = [1, [2], [3, [4, [5]]]];
let flatten = (arr) => {
let _arr_ = [];
if (Array.isArray(arr)) {
for (let i = 0, len = arr.length; i < len; i++) {
_arr_ = _arr_.concat(flatten(arr[i]));
}
} else {
_arr_.push(arr);
}
return _arr_;
}
flatten(arr); // [1, 2, 3, 4, 5] |
# new Function("arg_name_1", "arg_name2", ..., "main_body")
1)不推荐上述方法:语义不明确;代码解析两次(第二次发生在解析传入的参数,类似于解析eval(''))
# 函数是一个对象(new Function()),所以函数名只是一个指针(此处有助于理解为啥木有重载功能)
# arguments.callee => 函数本身 , arguments.callee.caller => 调用该函数者
# 函数的属性和方法:
- length:能够接收的命名参数个数
- prototype
# apply(context, [args_array | arguments])
# bind() :返回指定作用域的函数实例 |
var s1 = 'this is a string';
s1.toUpperCase();
// 上述一段代码在后台实际的执行情况如下
var s1 = new String('this is a string');
s1.toUpperCase();
s1 = null;
// 基本包装类型的生命周期在代码执行方法后就销毁了
#Boolean
var b = new Boolean(false);
b && true; // true(此时是对b这个对象求值,所以为true)
var b = Boolean(false);
b && true; // false
# 基本包装类型不是对象实例
var num = Number(10);
num instanceof Number; // false
#String
// 三个方法均不影响原数据
- slice(start[, end])
- substring(start[, end]):任一参数小于 0 或为 NaN => 0, 任一参数大于 stringName.length,则被当作 stringName.length,注意:当第二个参数小于第一个参数时,会互换参数位置
- substr(start[, length]) :length 为 0 或负值 => 0,则 substr 返回一个空字符串 |
|
提供一个实现连字符查找值的方法 // 输入: {a: {b: {c: 1}}}, ‘a.b.c’
// 输出:1
/**
* 判断对象是否有 key
*/
let isEmpty = (obj) => {
"use strict";
for (let key in obj) {
return false;
}
return true;
};
/**
* 判断值是否为对象
*/
let isObject = (obj) => {
"use strict";
return toString.call(obj) === "[object Object]";
};
/**
* 查找
*/
let find = (obj, key) => {
"use strict";
if (!isObject(obj) || isEmpty(obj) || !key) return void 0;
let keys = key.split('.'),
next = obj[keys[0]],
result,
next_key;
keys.shift();
next_key = keys.join('.');
if (!next_key) {
result = next;
} else {
result = find(next, next_key);
}
return result;
}; |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
本文旨在记录js引用类型的一些核心概念
instanceof操作符原理
数组迭代方法详解
Date
彻底领悟javascript中的exec与match方法:在全局模式下,match会返回所有匹配到项的数组,在不是全局模式下,match可以等价于exec
正则表达式中的贪婪和懒惰
The text was updated successfully, but these errors were encountered: