视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
javascript一些非主流运算符用法总结
2020-11-27 20:16:00 责编:小采
文档


javascript支持很多其它各种各样的运算符。

i.条件运算符(?:)

条件运算符是javascript中的唯一一个三元运算符。通常这个运算符写成"?:",这个运算符拥有三哥操作数,第一个操作数在"?"之前,第二个操作数在“?”和":"之间。第三个操作数早在":"之后,例如

x > 0 ? x : -x; //求x的绝对值
条件运算符的操作数可以是任意类型。第一个操作数当成布尔值,如果它是真值,那么将计算第二个操作数,并返回计算结果。赋值如果第一个值操作数是假值,那么将计算第三个操作数。并返回计算结果。第二个和第三个操作数总会计算其中之一。不可能两者同时进行。其实使用if语句也达到同样的效果(5.4.1),“?:”运算符只是提供了一种简写形式。这里是一个"?:"的典型使用场景,判断一个变量是否有定义,如果有定义则使用它,如果无定义,则使用一个默认值。

 grett = "hello" + (username ? username : "three");

和以下的代码是等价的,但上面的更加简洁

grett = "hello";
if (username)
 grett += username;
else
 grett + "three"

ii.typeof()运算符

typeof是一元运算符,放在单个操作数前面,操作数可以是任何类型,返回值表示操作类型的一个字符串。

 x __ typeof x
 undefined __ "undefined"
 null __ "object"
 ture或false __"boolean"
 任意数字或NaN __ "Number"
 任意字符串 __ "String"
 任意函数 __ "function"
 任意内容对象(非函数)__ "object"
 任意宿主对象 __ 由编译器各自实现的字符串,但不是"undefined" "boolean" "number" "string"

typeof最常用的用法写在表达式中们就像这样

(typeof value == "string") ? "" + value + "":value;
typeof运算符同样在swith语句中(5.4.3)非常有用,需要注意的是,typeof运算可以带上园括号。这样让typeof看起来像一个函数名,而非关键字

typeof(i)

iii.delete运算符

delete是一元操作符,它用来删除对象的属性或者数组的元素。就像赋值、递增、递减运算符一样。delete也是具有副作用的。它是用来做删除操作的。不是用来返回一个值的。

var o = {
 x: 1,
 y: 2
 }
 delete o.x;
 "x" in o; //=>false
 var a = [1, 2, 3];
 delete a[2]; // 删除数组中最后一个元素
 2 in a; //=> false 元素2已经在数组中不存在了
 a.length; //=>3,注意,数组长度并没有改变,尽管上一行删除了这个元素,但删除操作留下了一个洞。实际上并没有修改数组的长度,因此a的长度仍然为3

需要注意的是,删除属性或删除数组元素不仅仅设置了一个undefined值,当删除一个属性时,这个属性不复存在。读取一个不存在的值将会返回undefined.关于delete删除还有严格模式下的一些情况,需要学习的人自己试验,这里给一些例子。

var o = {x: 1,y: 2};
 delete o.x; //删除一个对象属性,返回true
 typeof o.x; //属性不存在,返回"undefined"
 delete o.x; //删除不存在的属性,返回true;
 delete o; //不能删除通过var关键字声明的变量,返回false
 delete 1; //参数不是一个左值。
 this.x = 1;// 给全局定义一个属性,这里没有使用var
 delete x ; //试图删除它,在非严格模式下返回true
 //在严格模式下回抛出异常,这时使用"delete this.x"来代替
 x; //运行时出错,没有定义x

iii.void运算符。

void是一元运算符,在出现操作数之前,操作数可以是任何类型。这个运算符并不是经常使用:操作数会照常计算,但会忽略计算结果并返回undefined。由于void会忽略操作数的值,因此在操作数具有副作用时使用void来程序更有意义。

这个最常用的带客户端url.在url写带有副作用的表达式,而void则让浏览器不显示在这个表达式的运算结果。

<a href="javascript:void window.open();">new</a>

iiii.逗号运算符。(,)

逗号运算符是二元运算符,它的操作数可以是任意类型。它首先计算左操作数,然后计算右操作数。

 i = 0, j = 1, k = 2;

它和下面的代码基本上等价的

i = 0; j = 1; k = 2;
总是会计算左侧的表达式,但计算结果忽略掉,也就是说,只有左侧表达式具有副作用,才会使用逗号运算让代码变得更通畅。逗号运算符最常用的场景是for循环中,这个for循环通常有多个循环变量。

//for循环中的第一个逗号是var语句的一部分
 //第二个逗号是逗号运算符
 //它将两个表达式(i++和j++)放在一条(for循环中)语句中
 for (var i = 0, j = 10; i < j; i++, j--);
 console.log(i + j);

下载本文
显示全文
专题