js中运算小技巧

  1. 判断奇偶
    一般实现:num%2===0为偶数
if(num & 1) {
  // num是奇数
} else {
  // num是偶数
}
  1. 优雅向下取整
    一般实现:Math.floor(num) (NaN和Infinity返回为本身)
let res = num | 0 // 按或运算

(NaN和Infinity返回为0)

let res = ~~num  // 取反操作

(NaN和Infinity返回为0)
3. 整数的转换使用+
一般实现:parseInt和parseFloat转换成number类型的整数型和浮点型

const str = '321'
console.log(typeof +str)  // number
  1. 两个非运算!!有时候用来将某个值转化为布尔类型
    其中 !标识布尔非运算
let res1 = !!null // false
let res2 = !!'123' // true
  1. 短路取值
  • ||遇真则真
  • &&遇假则假
    ** 说明: **
  • 运算从左到右计算,分别当第一个为真值/假值,计算就会停止
  • &&||优先级要高 a && b || c && d(a && b) || (c && d)
  • 巧用可减少不必要的if
console.log(true || false) // true
console.log(false || true) // true
console.log(true || true) // true
console.log(false || false) // false

console.log(false && true) // false
console.log(true && false) // false
console.log(true && true) // true
console.log(false && false) // false

console.log(null || 2 || undefined) // 2
  1. 三目运算
  • 减少if使用
let res = status ? 'a' : 'b'
  1. 可链式运算符?.
  • ES2020提案,可以访问对象内部属性的方式,尤其是深层嵌套的属性。
// 静态属性
const obj = {
  a: 1,
  b: true
}
let res = obj.b ? obj.b : null
let res1 = obj?.b
// 动态属性
let expression = 'a'
let res2 = obj?.[expression]
// 方法
let parent = {
  name: 'parent',
  getName: function() {
    console.log(this.name)
  }
};
parent.getName?.()   // parent
parent.getTitle?.()  //不会执行
  • 与无效合并一起使用,方法处理未定义或为空值和表达提供默认值,可使用??表示默认值
console.log(undefined ?? 'hello') // hello
console.log(true ?? 'hello') // true
  1. JSON.stringify序列化
    JSON.stringify(value[, replacer [, space]])
  • 将要序列化成 一个 JSON 字符串的值
  • 如果是函数,则在序列化过程中处理每个属性;如果是数组,则包含在数组中的属性名才会被序列化;如果为null或者未提供,则所有属性都会被序列化。
  • 指定缩进用的空白字符串,如果是数字,则代表有多少空格,上限为10;如果小于1,则代表没有空格;如果为字符串,则取字母,上限10;如果为null或者未提供,则没空格。
    ** 使用 **
  • 可用于深度拷贝,JSON.stringify和 JSON.parse 来拷贝一个完全一样的对象,而对原对象没有任何影响。
  • 如果一个对象有 toJSON 属性,当它被序列化的时候,不会对该对象进行序列化,而是将它的toJSON 方法的返回值进行序列化
var obj = {
  foo: 'foo',
  toJSON: function () {
    return 'bar';
  }
};
JSON.stringify(obj);      // '"bar"'
JSON.stringify({x: obj}); // '{"x":"bar"}' 

  1. 整数变量交换
  • 一般会通过一个临时变量做辅助
let temp = x
x = y
y = temp
  • 异或运算
x = x ^ y
y = x ^ y
x = x ^ y
[a,b] = [b,a]
x = x + y
y = x - y
x = x - y
原文地址:https://www.cnblogs.com/xiaolanschool/p/14777818.html