js实用好用的一些符号 ,你准没用过

简介: js实用好用的一些符号 ,你准没用过

前端面试题库 (面试必备)            推荐:★★★★★

地址:前端面试题库

前言

大家好,我是 simple ,我的理想是利用科技手段来解决生活中遇到的各种问题

按位取反运算符:~

对返回值进行按位取反(所有正整数的按位取反是其本身+1的负数,所有负整数的按位取反是其本身+1的绝对值,零的按位取反是 -1。其中,按位取反也会对返回值进行强制转换,将字符串5转化为数字5,然后再按位取反。false被转化为0,true会被转化为1。)

总之一句话:返回值会被乘于-1,然后再减1

~false === -1
~true === -2

indexOf通常找不到值就会返回-1,而在这里刚好可以为我所用

const arr = [1,2,3]
const index = arr.indexOf(4)
if(!~index) {
    console.log('没找到索引')
}

双位运算符 ~~

可以使用双位操作符来替代正数的 Math.floor( ),替代负数的Math.ceil( )。双否定位操作符的优势在于它执行相同的操作运行速度更快。

Math.floor(4.9) === 4      //true
// 简写为:
~~4.9 === 4      //true

不过要注意,对正数来说 ~~ 运算结果与 Math.floor( ) 运算结果相同,而对于负数来说与Math.ceil( )的运算结果相同:

~~4.5                // 4
Math.floor(4.5)      // 4
Math.ceil(4.5)       // 5
~~-4.5            // -4
Math.floor(-4.5)     // -5
Math.ceil(-4.5)      // -4

右移运算符 >>

运算符执行有符号右移位运算。与左移运算操作相反,它把 32 位数字中的所有有效位整体右移,再使用符号位的值填充空位。移动过程中超出的值将被丢弃。

举个例子:假设我们往右移动一位,其实就是除于2然后向下取整了,如果移动2位,就是除于4向下取整,以此类推,反正就是2的n次方。

4 >> 1 // 2
9 >> 1 // 4
15 >> 2 // 3

左移运算符 <<

同上,这里为乘,就不解释了

+ 正号

这个符号既是加号,也是正号,可以最优雅的将某个值转换成数字。

const timestamp = +new Date() // 时间戳
console.log(+'18' === 18) // true

空值合并运算符 ??

只有左侧的值为null或undefined的时候才使用右侧的值。

let obj = {age: 0, name: '', sex: null, has: false};
obj.has ?? '111'; // false
obj.age ?? '111'; // 0
obj.name ?? '111'; // ''
obj.sex ?? '111';  // 111
obj.addr ?? '111'; // 111

空值赋值运算符 ??=

和空值合并运算符??类似(可常量、可变量)。

当??=左侧的值为null、undefined的时候,会将右侧的值赋值给左侧变量。

let obj = {name: '', age: 0, has: false, sex: null}
obj.name ??= 'jack'
obj.age ??= 18
obj.has ??= true
obj.sex ??= 'man'
obj.add ??= '...'
console.log(obj) // {name: '', age: 0, has: false, sex: 'man', add: '...'}

可选链操作符 ?.

可选链操作符平时经常能看见,但是对象用中括号取值的时候可能就比较小众了。

let obj = {name: '', age: 0, has: false, sex: null}
obj?.['name']?.['length']
obj.getName?.()

使用BigInt支持大整数计算问题

es2020引入了一种新的数据类型 BigInt,用来表示任意位数的整数

例如

// 超过 53 个二进制位的数值(相当于 16 个十进制位),无法保持精度
Math.pow(2, 53) === Math.pow(2, 53) + 1 // true
// BigInt
BigInt(Math.pow(2, 53)) === BigInt(Math.pow(2, 53)) + BigInt(1) // false

除了使用BigInt来声明一个大整数,还可以使用数字后面加n的形式

1234 // 普通整数
1234n // BigInt

使用哈希前缀#将类字段设为私有

在类中通过哈希前缀#标记的字段都将被私有,子类实例将无法继承

例如

class Person {
    #privateField;
    #privateMethod() {
        return 'hello world';
    }
    constructor() {
        this.#privateField = 42;
    }
}
const instance = new Person()
console.log(instance.privateField); //undefined
console.log(instance.privateMethod); //undefined

可以看到,属性privateField和方法privateMethod都被私有化了,在实例中无法获取到

前端面试题库 (面试必备)            推荐:★★★★★

地址:前端面试题库

相关文章
|
7月前
|
JavaScript 前端开发
用JavaScript正则表达式匹配对应字符串高亮显示,并过滤掉空格、<、>等HTML节点符号
用JavaScript正则表达式匹配对应字符串高亮显示,并过滤掉空格、<、>等HTML节点符号
|
2月前
|
前端开发 JavaScript 安全
前端JS实现密码校验键盘横竖、26字母、相同字母、相同数字、密码包含用户名、数字 字母不能连续 不能相同三个、不能横向 竖向 连续三个 包含字符、不能有中文符号
该 JavaScript 代码实现了一个严格的密码校验功能,确保密码满足多种安全要求,包括长度、字符类型、不包含中文及特殊字符、不与用户名相似等。通过多个辅助函数,如 `validateFormat` 检查密码格式,`isHasChinaCharFun` 检测中文符号,`getCharAll` 生成键盘组合,以及 `checkPasswordFun` 综合验证密码的有效性和安全性。此工具对于提高用户账户的安全性非常有用。
36 0
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
用html+javascript打造公文一键排版系统14:为半角和全角字符相互转换功能增加英文字母、阿拉伯数字、标点符号、空格选项
|
JavaScript 前端开发 索引
javascript截取两个符号之间的字符串(2):lastIndexOf匹配和正则表达式匹配
javascript截取两个符号之间的字符串(2):lastIndexOf匹配和正则表达式匹配
417 0
|
JavaScript 前端开发
JavaScript 语法:运算符号
JavaScript 语法 之 运算符号
72 0
JavaScript 语法:运算符号
|
JavaScript 前端开发
javascript截取两个符号之间的字符串
javascript截取两个符号之间的字符串
90 0
|
JavaScript 前端开发
javascript中 $和#符号的意思
$() 方法是在DOM中使用过于频繁的 document.getElementById() 方法的一个便利的简写,就像这个DOM方法一样,这个方法返回参数传入的id的那个元素。
434 0
|
JavaScript
js数组与字符串的相互转换,排除某个符号或文字
js数组与字符串的相互转换,排除某个符号或文字
160 0
|
JavaScript 前端开发 算法
JavaScript中一些不常见的运算符号(三分钟看完)
JavaScript中一些不常见的运算符号(三分钟看完)
123 0
|
JavaScript
JS中自定义replace可替换特殊符号$等,但无法忽略大小写的函数
//可替换特殊符号$等,但无法忽略大小写的函数 String.prototype.replaceStr = function (s1, s2) { this.str = this; if (s1.
1108 0
下一篇
无影云桌面