js不常见操作运算符总结


Posted in Javascript onNovember 20, 2021

1、前言

js的运算符很多,之前有文章提过。例如如下:

js整数的操作:

使用|0~~可以将浮点转成整型且效率方面要比同类的parseInt,Math.round 要快,在处理像素及动画位移等效果的时候会很有用。性能比较见此。

var foo = (12.4 / 4.13) | 0;//结果为3
var bar = ~~(12.4 / 4.13);//结果为3

还有一个小技巧,就是!!2个叹号,可以将一个值,快速转化为布尔值。你可以测试一下!

var eee="eee";
alert(!!eee)

这些都是一些运算符,具体请看javascript实用技巧,js小知识,js运算符单竖杠“|”

今天再补充几个:

2、逗号运算符

let x = 1;
x = (x++, x);
console.log(x);
// expected output: 2
x = (2, 3);
console.log(x);
// expected output: 3

逗号运算符,它将先计算左边的参数,再计算右边的参数值。然后返回最右边参数的值。

var a = 10, b = 20;

function CommaTest(){
    return a++, b++, 10;
}

var c = CommaTest();

alert(a); // 返回11
alert(b); // 返回21
alert(c); // 返回10

知道了调用函数运算符后,我们举个例子说明关于如何处理它们冲突的事。

alert(2*5, 2*4); // 输出10

上面这段代码输出10,但是如果根据逗号运算符的原理来解释的话,那应该是输出8才对。为什么呢?

因为逗号运算符在JavaScript在的优先级是最底的,记住这一点非常有用。所以函数调用运算符将先于逗号运算符运行。结果alert函数输出第一个参数的值。将上面的代码修改成如下所示即可。

alert((2*5, 2*4)); // 返回8

3、javaScript空值合并操作符(??)

只有当左侧为nullundefined时,才会返回右侧的数 空值合并操作符(??)是一个逻辑操作符,当左侧的操作数为 null 或者 undefined 时,返回其右侧操作数,否则返回左侧操作数。

与逻辑或操作符(||)不同,逻辑或操作符会在左侧操作数为假值时返回右侧操作数。也就是说,如果使用 || 来为某些变量设置默认值,可能会遇到意料之外的行为。比如为假值(例如,'' 或 0)时。见下面的例子。

let str = null||undefined
let result = str??'haorooms博客'
console.log(result)//haorooms博客

const nullValue = null;
const emptyText = ""; // 空字符串,是一个假值,Boolean("") === false
const someNumber = 42;

const valA = nullValue ?? "valA 的默认值";
const valB = emptyText ?? "valB 的默认值";
const valC = someNumber ?? 0;

console.log(valA); // "valA 的默认值"
console.log(valB); // ""(空字符串虽然是假值,但不是 null 或者 undefined)
console.log(valC); // 42

4、javaScript可选链操作符( ?. )

可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每个引用是否有效。?. 操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(nullish ) (null 或者 undefined) 的情况下不会引起错误,该表达式短路返回值

使用可选链操作符( ?. )浏览器不会出现报错!

const demo = {
    name: 'haorooms',
    cat: {
        name: 'haorooms cat'
    }
};
console.log(demo.dog?.name); 
// expected output: undefined
console.log(demo.what?.());
// expected output: undefined

函数调用:

let result = someOne.customMethod?.();

如果希望允许 someOne 也为 null 或者 undefined ,那么你需要像这样写 someOne?.customMethod?.()

可选链与表达式:

let nestedProp = obj?.['prop' + 'Name'];

可选链访问数组:

let arrayItem = arr?.[42];

短路计算:

let potentiallyNullObj = null;
let x = 0;
let prop = potentiallyNullObj?.[x++];

 
console.log(x); // x 将不会被递增,依旧输出 0

//当在表达式中使用可选链时,如果左操作数是 null 或 undefined,表达式将不会被计算


let customer = {
  name: "haorooms",
  details: { age: 82 }
};

let customerCity = customer?.city ?? "中国";
console.log(customerCity);  // “中国”

到此这篇关于js不常见操作运算符总结的文章就介绍到这了,更多相关js操作运算符内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
解决jQuery插件tipswindown与hintbox冲突
Nov 05 Javascript
最佳JS代码编写的14条技巧
Jan 09 Javascript
基于jQuery的让非HTML5浏览器支持placeholder属性的代码
May 24 Javascript
JS中setInterval、setTimeout不能传递带参数的函数的解决方案
Apr 28 Javascript
JS中frameset框架弹出层实例代码
Apr 01 Javascript
JavaScript的this关键字的理解
Jun 18 Javascript
JS动态计算移动端rem的解决方案
Oct 14 Javascript
基于vue.js实现侧边菜单栏
Mar 20 Javascript
angularjs数组判断是否含有某个元素的实例
Feb 27 Javascript
Vue props用法详解(小结)
Jul 03 Javascript
js中对象与对象创建方法的各种方法
Feb 27 Javascript
layui表格数据重载
Jul 27 Javascript
javascript的setTimeout()使用方法总结
Nov 20 #Javascript
JavaScript异步操作中串行和并行
Nov 20 #Javascript
vue中 this.$set的使用详解
如何用vue实现网页截图你知道吗
利用 JavaScript 构建命令行应用
Nov 17 #Javascript
Ajax实现异步加载数据
Nov 17 #Javascript
36个正则表达式(开发效率提高80%)
Nov 17 #Javascript
You might like
关于我转生变成史莱姆这档事:第二季PV上线,萌王2021年回归
2020/05/06 日漫
php中通过curl模拟登陆discuz论坛的实现代码
2012/02/16 PHP
PHP微信开发之二维码生成类
2015/06/26 PHP
Zend Framework教程之Application和Bootstrap用法详解
2016/03/10 PHP
php+mongodb判断坐标是否在指定多边形区域内的实例
2016/10/28 PHP
PHP正则匹配日期和时间(时间戳转换)的实例代码
2016/12/14 PHP
数据结构之利用PHP实现二分搜索树
2020/10/25 PHP
html下载本地
2006/06/19 Javascript
javascript 类型判断代码分析
2010/03/28 Javascript
JavaScript中的稀疏数组与密集数组[译]
2012/09/17 Javascript
教你如何使用firebug调试功能了解javascript闭包和this
2015/03/04 Javascript
基于JS组件实现拖动滑块验证功能(代码分享)
2016/11/18 Javascript
angular2 ng build部署后base文件路径问题详细解答
2017/07/15 Javascript
jQuery ajax调用webservice注意事项
2017/10/08 jQuery
详解vue项目的构建,打包,发布全过程
2017/11/23 Javascript
JS多个异步请求 按顺序执行next实现解析
2019/09/16 Javascript
jQuery利用cookie 实现本地收藏功能(不重复无需多次命名)
2019/11/07 jQuery
Ant Design Vue 添加区分中英文的长度校验功能
2020/01/21 Javascript
Vue如何基于es6导入外部js文件
2020/05/15 Javascript
微信小程序上传帖子的实例代码(含有文字图片的微信验证)
2020/07/11 Javascript
VUE和Antv G6实现在线拓扑图编辑操作
2020/10/28 Javascript
Python过滤函数filter()使用自定义函数过滤序列实例
2014/08/26 Python
python进阶教程之异常处理
2014/08/30 Python
python基于隐马尔可夫模型实现中文拼音输入
2016/04/01 Python
numpy自动生成数组详解
2017/12/15 Python
Python模拟随机游走图形效果示例
2018/02/06 Python
华为校园招聘上机笔试题 扑克牌大小(python)
2020/04/22 Python
使用Python实现 学生学籍管理系统
2019/11/26 Python
使用python从三个角度解决josephus问题的方法
2020/03/27 Python
Python startswith()和endswith() 方法原理解析
2020/04/28 Python
Python绘图之柱形图绘制详解
2020/07/28 Python
Flask中jinja2的继承实现方法及实例
2021/03/03 Python
Html5上传图片 移动端、PC端通用代码
2016/06/08 HTML / CSS
酒店开业策划方案
2014/06/02 职场文书
诉讼授权委托书范本
2014/10/05 职场文书
2016年第十四个公民道德宣传日活动总
2016/04/01 职场文书