JS基本常识
- typeof 返回的7个值 ‘number’/‘string’/‘boolean’/‘object’/‘function’/‘undefined’/‘symbol’
- instanceof 用法, constructor
- js里面的函数名是函数实例的引用地址,可以作为参数和返回值, call/apply改变this,扩充作用域
ES6 新增的数据类型 Symbol
原始数据类型 Symbol ,表示独一无二的值,最大的用法是用来定义对象的唯一属性名
let sy = Symbol("key1"); // 写法1 let syObject = {}; syObject[sy] = "kk"; console.log(syObject); // {Symbol(key1): "kk"} // 写法2 let syObject = { [sy]: "kk" }; console.log(syObject); // {Symbol(key1): "kk"} // 写法3 let syObject = {}; Object.defineProperty(syObject, sy, {value: "kk"}); console.log(syObject); // {Symbol(key1): "kk"}
常见的用法
在 ES5 使用字符串表示常量,但是用字符串不能保证常量是独特的,使用 Symbol 定义常量,这样就可以保证这一组常量的值都不相等
const COLOR_RED = Symbol("red"); const COLOR_YELLOW = Symbol("yellow"); const COLOR_BLUE = Symbol("blue"); function getConstantName(color) { switch (color) { case COLOR_RED : return "COLOR_RED"; case COLOR_YELLOW : return "COLOR_YELLOW "; case COLOR_BLUE: return "COLOR_BLUE"; default: throw new Exception('Can't find this color'); } }
1.树组件中递归操作
function recursion(argc){ if(argc instanceof Array){ argc.forEach(item => { item.label = item.strutsName; if(item.childs instanceof Array){ item.children=item.childs; delete item.childs; this.recursion(item.children) } }) } return argc; }
2.找出2个数组中相同的项,并组成一个新数组; 数组去重
var arr1 = [1,2,3,4,5]; var arr2 = [3,12,34,55,6,1]; console.log(arr1.filter((item => { return arr2.indexOf(item)>=0; }))); // 数组去重 var arr1 = [12, 66, 4, 88, 3, 7, 12, 66, 23, 23, 2, 12, , 3, 3, 2, 9]; var newArr = []; arr1.filter(function (item, index) { console.log(newArr) if (newArr.indexOf(item) == -1) { newArr.push(item) } });
3.数组深拷贝
一般的基本数据用’='号就可以复制,但函数,数组,对象这些引用类型的数据不行
使用 JSON.parse(JSON.stringify(arr1)) 如果数组的值中有函数类型则不能使用
不断的判断当前value是不是object对象,递归调用
var timeGet = function(){ this.age = 28; return 123; } var arr = [1,2,3,4,5,'jack',true, timeGet]; function deepClone(source){ if(!source || typeof source !== 'object'){ throw new Error('error arguments, only need shllow copy'); } var target = (source.constructor === Array) ? []:{}; for(var keys in source){ if(source.hasOwnProperty(keys)){ if(source[keys] && typeof source[keys] === 'object'){ target[keys] = source[keys].constructor ===Array ?[]:{} target[keys] = deepClone(source[keys]) }else { target[keys]=source[keys]; } } } return target; } var deepArr = deepClone(arr); deepArr[2]= {'age': 25, 'sex': true} console.log(arr, deepArr);
4.JS数组迭代
map/filter/forEach/every/some
map返回 每次函数调用返回的结果 组成的数组
filter返回 该函数 会返回true的项 组成的数组
forEach 无返回值
every 数组所有项都返回true 则返回true,类似&& 一旦有一个不符合条件,则停止迭代
some 函数对数组里面有一项返回true 则返回true,类似|| 不停的迭代找符合条件的值,一旦找到,则停止迭代
var arr = [1,2,3,4,5]; console.log(arr.map((item,index,arr)=>{ console.log('map: ', item, index ,arr); return item>2 })); //返回[false,false,true,true,true] console.log(arr.filter(function(item,index,arr){ console.log('filter: ', item,index,arr); return item>2; })); // 返回 [3,4,5] console.log(arr.forEach(function(item,index,arr){ console.log('foreach: ', item,index,arr); return item>2; })); // foreach无返回值 console.log(arr.every((item,index,arr) => { console.log('every: ', item, index, arr); return item>2; })); // 返回false, 打印一遍every: console.log(arr.some((item, index, arr) => { console.log('some: ', item, index, arr); return item>2; })); // 返回true,打印3遍some:
文章来源: https://blog.csdn.net/I_am_a_Bug_6/article/details/91399630