js 常见操作

匿名 (未验证) 提交于 2019-12-02 23:39:01

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
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!