美文网首页程序员
前端的一些编程小技巧

前端的一些编程小技巧

作者: 之幸甘木 | 来源:发表于2021-01-13 10:26 被阅读0次
  1. 利用sort根据对象中的某个属性对整个对象进行排序:
arr = arr.sort((pre, next) => pre.order - next.order);
  1. 利用es6语法缩写函数
function todoApp(state, action) {
  if (typeof state === 'undefined') {
    return initialState;
  }

  return state;
}

//修改为
function todoApp(state = initialState, action) {
  return state;
}
  1. 防止页面因为没有某个功能而报错
// 在typescript中因为先进行了变量检测
// 所以一般直接就报错了
// 除非先给props设置为any

let { fn } = this.props;

// 方法1:
fn && fn();

// 方法2:
if(fn) fn();

// 方法3(建议):
fn?.()
  1. 利用剩余参数复制对象并添加或修改属性
let obj1={ name: 'xiaohong', age: 11 }

// 如果obj1中有name属性,则会被覆盖修改
let obj2 = { ...obj1, name: 'xiaoming' };

console.log(obj2); // { name: 'xiaoming', age: 11 }
  1. 对象解构的骚操作
onClick = ({target: {innerHTML}}) => {

  //等同于console.log(e.target.innerHTML);
  console.log(`Clicked on "${innerHTML}"!`);
  
  // 但是请注意,这样写是不能直接用target访问到target的
  // 访问target,使用{target,target:{innerHTML}}才可以
};
  1. 隐式转换
// 转换为字符串
let a = 21;
console.log(a + '');  // expected output: '21'

// 转换为数字
let a = '21';
console.log(a * 1); // expected output: 21
console.log(+a); // expected output: 21
  1. 快速生成数组
/*
*  Array.from方法,将类数组对象(包括字符串)转换为数组
*  @params ArrayLikeObject 类数组对象,字符串,或者带length属性的对象
*  @params (elem,index)=>{} 回调函数,当前遍历到的元素及其下标,返回值作为新数组的元素
*/
let arr = Array.from({ length:10 }, (x, i) => i);
// arr:[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

// 快速生成一个随机数组
let arr = Array.from({ length: 1000 }, Math.random)
// [ 0.6163093133259432, 0.8877401276499153, 0.4094354756035987, ...] - 1000 items

/*
*  Array在只有1个参数时,该参数是数组的长度
*/
let arr1 = Array(1, 2, 3, 4, 5); // arr1:[1,2,3,4,5]
let arr2 = Array(3) // arr2:[empty,empty,empty]

// 利用from将字符串转换为数组:
let str = 'app';
let arr3 = str.split(''); // arr3:['a','p','p']
let arr4 = Array.from(str); // arr4:['a','p','p']
  1. javascript实现增删改查
let objs = [
  {
    name: 'xiaoming',
    age: 14
  },
  {
    name: 'xiaohua',
    age: 15
  }
];

// 增
let obj_add = {
  name: 'xiaohong',
  age: 16
};

objs.push(obj_add);

// 删
let objs_del = objs.filter(item => item.name !== 'xiaoming');

// 查
let objs_sel = objs.filter(item => item.name === 'xiaohong');

// 改
let obj_set = {
    name: 'xiaohua',
    age: 16
}

let objs_set = objs.map(item => item.name === obj_set.name ? obj_set : item);

// 排序
let objs_sort = objs.sort((a, b) => a.age - b.age);
  1. 奇数或偶数使用 位 运算的方式:
const value = 232;  

if (value & 1) console.log("odd");
else console.log("even");
// even
  1. 检查有效的 URL:
const isValidURL = (url) => {
  try {
    new URL(url);
    return true;
  } catch (error) {
    return false;
  }
}

isValidURL('https://segmentfault.com/u/minnanitkong/articles')
// true

isValidURL("https//invalidto");
// false
  1. 距离过去到现在时间表示:
const fromAgo = (date) => {
  const ms = Date.now() - date.getTime();
  const seconds = Math.round(ms / 1000);
  const minutes = Math.round(ms / 60000);
  const hours = Math.round(ms / 3600000);
  const days = Math.round(ms / 86400000);
  const months = Math.round(ms / 2592000000);
  const years = Math.round(ms / 31104000000);

  switch (true) {
    case seconds < 60:
      return `${seconds} second(s) ago"`;
    case minutes < 60:
      return `${minutes} minute(s) ago"`;
    case hours < 24:
      return `${hours} hour(s) ago"`;
    case days < 30:
      return `${days} day(s) ago`;
    case months < 12:
      return `${months} month(s) ago`;
    default:
      return `${years} year(s) ago`;
  }
};

const createdAt = new Date(2021, 0, 5);
fromAgo(createdAt); // 14 day(s) ago;
  1. 逻辑空赋值(??=),空值合并(??)和可选链(?.)操作符
// 为元素设置默认值

let formData = {};
let a = formData?.name ?? 'xiaoming';

console.log(a); // xiaoming

a ??= 'xiaohong';

console.log(a); // 'xiaoming'

相关文章

网友评论

    本文标题:前端的一些编程小技巧

    本文链接:https://www.haomeiwen.com/subject/bfpfaktx.html