js笔记 -待续

81 阅读3分钟

类和对象

面向对象解决思路:
	将公共的属性和方法抽取出来,写入类中,根据类,实例化对象,创建各种各样的对象。

面向对象写js案例

案例 tab栏的切换
抽象对象:Tab对象
1.该对象具有切换功能
2.该对象具有添加功能
3.该对象具有别除功能
4.该对象具有修改功能

reduce的使用及使用场景

map 的使用及使用场景

//将数组转为字符串型,数值型 map(Number),map(String),map( str =>parseInt(str) )
let arr=['3','5','7']
arr=arr.map(Number)
console.log(arr);

遍历对象的各个属性

let obj = {
  a: 3,
  b: 3,
};

for (let asdf in obj) {
  console.log(asdf);//a b
}

判断是否是数组

Array.isArray(obj)//是打印出来则为true,不是就是false

直到满足条件才进行,

function checkVoucherInfo(params) {
  console.log("函数");
  if (params.a == 3) {
    return 0;
  } else if (params.a == 2) {
    return 0;
  } else {
    return 1;
  }
}
if (checkVoucherInfo({ a: 1, b: 1, c: 0 })) {
  console.log(1234);
}
//返回 函数 1234

回调函数

// 为了确保先执行 funA 再执行 funB
// 我们在 funA 加上 callback 参数
var funA = function (callback) {
  setTimeout(function () {
    console.log("1234,function A");
    // 如果 callback 是个函数就调用它
    if (typeof callback === "function") {
      console.log(callback());;
    }
  }, 1000);
};

var funB = function () {
  return "b"
};

// 将 funB 作为参数带入 funA()
funA(funB);
//打印1234,function A 
//打印b

对象的简写形式

let a=1
let obj={a:a}//等价与
//let obj={a}
console.log(obj);
// 获取选中节点及父级的label
    getBreadcrumbArray(list, id) {
      let temp = [];
      let forFn = function(arr, id) {
        for (let i = 0; i < arr.length; i++) {
          let item = arr[i];
          if (item.id === id) {
            forFn(list, item.pid);
            temp.push(item.label);
            break;
          } else if (item.children) {
            forFn(item.children, id);
          }
        }
      };
      forFn(list, id);
      return temp;
    },

        

没有该变量会报错,

let a={}
console.log(a.b);//不报错 undefined
console.log(b);//报错 b is not defined

async

// async返回的是Promise对象?
async function testAsync() {
    return 'hello';
//上篇文章Promise对象的返回值如果不是Promise,会通过Promise.resolve()转化为Promise,再进行处理
}
const result = testAsync()
console.log(result);//Promise { 'hello' }  说明async返回的是Promise对象

call 通过 call(),您能够使用属于另一个对象的方法。

//没有参数的时候
let getSum = {
  a: 1,
  b: 2,
  fun: function () {
    return this.a + this.b;
  },
};
console.log(getSum.fun());//3
let obj1 = {
  a: 11,
  b: 11,
};
let obj2 = {
  a: 22,
  b: 22,
};
console.log(getSum.fun.call(obj1));//22
console.log(getSum.fun.call(obj2));//44
	
//有参数情况
//call() 方法分别接受参数。
//apply() 方法接受数组形式的参数。
let getSum = {
  fun: function (a, b) {
    return a + b;
  },
};
let obj1 = {};
let obj2 = {};
console.log(getSum.fun.apply(obj1, [1, 1]));
console.log(getSum.fun.call(obj2, 2, 2));

synyc await ???

请求返回的promise对象,一般用.then(()=>{}).catch(()=>{})获取数据

也可以用

 async categoryList() {
    let res = await reqgetCategoryList();// reqgetCategoryList()是发请求
    console.log(res);/
  },
//export const reqgetCategoryList = () =>requests.get(`/product/getBaseCategoryList`);
      
event.target
goSearch(event){
      let node=event.target
      console.log(node.dataset);  
    }
//node 输出的是节点   <a data-v-18b3c0cc="" data-categoryname="家用电器">家用电器</a>
//node.dataset  输出的是对象
{
    "v-18b3c0cc": "",
    "categoryname": "家用电器"
}

try{}catch{}的用法

function _getStorage(key) {
  let data = sessionStorage.getItem(key)
  let result = ''
  try {
      result = JSON.parse(data)
  } catch (e) {
      result = data
  }
  return result
}
JSON.parse(null);
// null

JSON.parse("");
// VM6600:1 Uncaught SyntaxError: Unexpected end of JSON input

JSON.parse(undefined);
// VM6635:1 Uncaught SyntaxError: Unexpected token u in JSON at position 0

Object.keys(obj)

判断是否是空对象 Object.keys(obj).length

let obj={a:2,b:3}
console.log(Object.keys(obj));			//[ 'a', 'b' ]
console.log(Object.keys(obj).length);//2

sessionStorage和JSON.parse

当使用sessionStorage.getItem获取数据时,得到的是 JSON 字符串 ,需要用JSON.parse进行解析,不然获取不到对应的值。

let userInfo = sessionStorage.getItem("userInfo")
userInfo.name  //undefine
JSON.parse(userInfo.name)

Object.assign

const o1 = { a: 1, b: 1, c: 1 };
const o2 = { b: 2, c: 2 };
const o3 = { c: 3 };

const obj = Object.assign({}, o1, o2, o3);
console.log(obj); // { a: 1, b: 2, c: 3 }
1.属性被后续参数中具有相同属性的其他对象覆盖。
2.目标对象的属性与源对象的属性相同,源的会覆盖目标的属性

检查数组是否包含一个基本类型的值

Arrya.includes() 方法 检查数组是否包含一个基本类型的值

let animals = ["?", "?", "?", "?"]

animals.includes("?") // true
animals.includes("?") // false

Arrya.indexOf() 方法 查找的元素的确切位置

let grades = ["B", "D", "C", "A"]

grades.indexOf("A") // 3
grades.indexOf("F") // -1 找不到返回-1

检查对象数组是否包含对象

let animals = [{name: "dog"}, {name: "snake"}, {name: "monkey"}, {name: "donkey"}]
let element = {name: "monkey"}

animals.some(animal => animal.name === element.name)

引用类型

let map = new Map();
let arr = [];
let obj = { name: "1111" };
arr.push(obj);
map.set(1, obj);
console.log(arr[0] == map.get(1));
obj.age = 18; //map和arr的值会同时变化
let obj2 = { eee: 333 };
//  map.set(1, obj2);  
//  只有map的值变化,此时key:1对应的obj2的地址
console.log(map);
console.log(arr);

删除对象的某个属性 delete
let dog = {
  name:'wangwang',
  age:"33"
};
console.log(dog);
//{name: "wangwang", age: "33"}
//删除当前dog对象中的age属性
delete dog.age;

console.log(dog);
//{name: "33"}