js之运算符其它运算符(三元运算符,逗号运算符,void运算符,typeof,delete运算符)
Javascript支持很多其它的运算符,具体如下:
一、条件运算符(?:)
条件运算符是Javascript中唯一的三个操作数的三元运算符,有时会直接称做是“三元运算符”。
基本格式:condition ? expr1 : expr2
执行流程::condition为true,返回expr1,conditioin为false,返回expr2
三元运算符的操作数可以是任意的类型,其实用if语句也会带来同样的效果,三元运算符只是提供了一种简写形式。
事实上,三元运算符可以扩展使用,当设置的条件成立或者是不成立时,执行语句都可以不止一句,如下:condition?(expr1).(expr2) : (expr3).(expr4) 多个执行语句用"."连接,这样它的功能更像if...else流程语句上靠近了。
同时它还可以嵌套使用,但嵌套使用的可读性不好,不利于后期的一个维护,不建议使用。
<script>
//求a,b,c三值中的最大值
var a = 10, b = 12, c = 19; //要注意a,b,c类型要相同 var max1 = (a > b) ? a : b;
var max2 = (max1 > c) ? max1 : c;
console.log(max2); //19 var max = ((a > b) ? a : b) > c ? ((a > b) ? a : b) : c;
console.log(max); //19 if (a > b && a > c) {
max = a;
} else if (b > a && b > c) {
max = b;
} else {
max = c;
}
console.log(max);//19
</script>
二、逗号运算符
逗号运算符是二元操作符,它的操作数可以是任意类型。它首先计算左边操作数,然后计算右边操作数,最后返回右操作数的值,用逗号运算符可以在一条语句中执行多个运算。
逗号运算符常用于声明多个变量。最常用的场景是在for循环中,这个循环通常具有多个循环变量。它还可以用于赋值,在用于赋值时,逗号运算符总是返回表达式中的最后一项。
<script>
var a = 0, b = 2, c = 5;
//等价于:var a=0;b=2;c=5;
var num = (1, 2, 3, 4, 5);//不能去掉括号
console.log(num);
</script>
三、圆括号运算符
也叫做分组运算符,它有两种用法:表达式放在圆括号中作用是求值,跟在函数后面的作用就是调用函数
<script>
//把表达式放在圆括号之中,将返回表达式的值
console.log(('a')); //a
console.log((1 + 9)); //10 //把对象放在圆括号之中,会返回对象本身
var n = { a: 1 };
console.log((n));//{a:1} //把函数放在圆括号中,会返回函数本身
function fn() {
return 1;
}
console.log((fn)); //function fn(){retrun 1;}
console.log(fn()); //1 //由于圆括号的作用是求值,如果将语句放在圆括号中,会报错,圆括号运算符不能为空</script>
四、void运算符
void是一元运算符,它出现在操作数之前,操作数可以是任意类型,这个运算符并不经常的使用,操作数会照常计算,但忽略计算结果且返回undefined。由于void会忽略操作数的值,所以在操作数具有副作用的时候使用void来让程序更具语义。
这个运算符最常用在客户端URL——javascript:URL中,在URL中可以写带有副作用的表达式,而void则让浏览器不必显示这个表达式的计算结果。例如,经常在HTML代码中的<a>标签里使用void运算符。
<a href="javascript:void window.open();">打开一个新窗口</a>
五、delete运算符
delete是一元运算符,它用来删除对象属性或者数组元素。它是用于做删除操作的。需要注意的是,删除属性或者删除数组元素不仅仅是设置了一个undefined的值,当删除一个属性时,这个属性将不会存在,读取一个不存在的属性将返回undefined,但是可以通过in运算符来检测这个属性是否在对象中存在。
delete希望它的操作数是一个左值,如果不是左值那么将不进行任何操作返回true。否则delete将试图删除这个指定的左值,如删除成功,delete将返回true。
需要强调的一点是并不是所有的属性都是可以删除的,一些内置的核心和客户端属性是不能删除的,用户通过var语句声明的变量也是不能删除的,同样通过function语句定义的函数和函数参数也是不能删除的。
<script>
var n = {
x: 1,
y: 2
}
console.log(delete n.x); //true 删除一个对象的属性,返回true
console.log(typeof n.x); //undefined 属性不存在时,返回undefined
console.log(delete n); //false 不能删除通过var声明的变量
</script>
六、typeof运算符
typeof是一个一元运算符,放在其单个操作数的前面,操作数可以是任意类型。返回值为表示操作类型的一个字符串。对不同的操作数,它返回不同的结果。
<script>
//对于数字类型,typeof返回的值是number
console.log(typeof (1));//number
console.log(typeof (NaN));//number //对于字符串类型,typeof返回的值是string
console.log(typeof ("string"));//string //对于布尔值,typeof返回的值是Boolean
console.log(typeof (true));//true //对于对象、数组、null 返回的值是 object
console.log(typeof (window));//object
console.log(typeof (null));//object //对于函数类型,返回的值是 function
console.log(typeof (Date));//function
//如果运算数是没有定义的(比如说不存在的变量、函数或者undefined),将返回undefined
console.log(typeof (undefined));//undefined
</script>
七、其它 (运算符的优先级)
一元运算符 > 算术运算符 > 比较运算符 > 逻辑运算符 > 三元运算符 > 赋值运算符 > 逗号运算符
中括号,小括号,点属于同一级别,它们有最高的优先级,如果不确定先算谁,可以给要算的内容加上小括号,提升其优先级。
<script>
var a={
b:
}
var c=[,,];
console.log(a.b+c[]); //
</script>
js之运算符其它运算符(三元运算符,逗号运算符,void运算符,typeof,delete运算符)的更多相关文章
- javascript特殊运算符(in,instanceof,typeof,delete,void,逗号)
in运算符 in运算符要求其左边的运算数是一个字符串,或可以被转换为字符串,右边的运算数十一个对象或数组.如果该 运算符左边的值是右边对象的一个属性名,则返回true, ...
- Net is as typeof 运行运算符详解 net 自定义泛型那点事
Net is as typeof 运行运算符详解 概述 在了解运行运算符的前提我们需要了解什么是RTTI ,在任何一门面向对象的语言中,都有RTTI这个概念(即 运行时). RTTI(Run-Ti ...
- C++重载new和delete运算符
内存管理运算符 new.new[].delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内 ...
- C++学习32 重载new和delete运算符
内存管理运算符 new.new[].delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内 ...
- c/c++ 重载new,delete运算符 placement new
重载new,delete运算符 new,delete在c++中也被归为运算符,所以可以重载它们. new的行为: 先开辟内存空间 再调用类的构造函数 开辟内存空间的部分,可以被重载. delete的行 ...
- 用new和delete运算符进行动态分配和撤销存储空间
測试描写叙述:暂时开辟一个存储空间以存放一个结构体数据 #include <iostream> #include <string> using namespace std; s ...
- 重载new和delete运算符
内存管理运算符 new.new[].delete 和 delete[] 也可以进行重载,其重载形式既可以是类的成员函数,也可以是全局函数.一般情况下,内建的内存管理运算符就够用了,只有在需要自己管理内 ...
- C++ new和delete运算符得简单使用
NEW C++ 中的new运算符用来分配内存,和c语言中得malloc有相似得功能. 使用new为当个元素开辟内存空间,并返回地址 typeName *pointer_name =new typeNa ...
- JavaScript---js语法,数据类型及方法, 数组及方法,JSON对象及方法,日期Date及方法,正则及方法,数据类型转换,运算符, 控制流程(三元运算),函数(匿名函数,自调用函数)
day46 一丶javascript介绍 JavaScript的基础分为三个 1.ECMAScript:JavaScript的语法标准.包括变量,表达式,运算符,函数,if语句,for语句 ...
随机推荐
- 快速查找 js 插件
我们是否为一个插件找半天找不到而烦恼 BootCDN 现在不用了,我们可以在 https://www.bootcdn.cn/ 中查找我们想要的任何插件,然后点进去,一直到点进去文件,我们便可以得到 这 ...
- LC 962. Maximum Width Ramp
Given an array A of integers, a ramp is a tuple (i, j) for which i < j and A[i] <= A[j]. The ...
- 多线程分配线程的实现方案:CountDownLatch类
需求:假如我们本地有4个文件需要解析,每个文件的内容为20万行.为了提高效率我们要创建4个线程进行处理.等4个线程处理完,要在文件日志表中记录处理状态. 一般的的解决方法是使用join,join用于让 ...
- javascript的历史和入门
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
- 依赖注入框架之dagger2
主页: https://github.com/google/dagger 历史 * Dagger1是由Square公司受到Guice(https://github.com/google/guice)启 ...
- 使用jQuery做简单的图片轮播效果
一.本特效主要用到的前端知识点 CSS中绝对定位(absolute)CSS实现垂直居中jQuery中简单的淡入淡出动画效果(fadeIn,fadeOut)定时器(setInterval,clear ...
- JavaScript(4):正则表达式
基础方法 <!DOCTYPE html> <html> <body> <p>类型及转换</p> <script> // 正则表达 ...
- Oracle:常用操作(定时作业,逻辑导入,数据泵导入)
1.逻辑导入: /*第1步:创建临时表空间 **/ create temporary tablespace user_temp1 tempfile 'D:\app\Administrator\orad ...
- <转>经典测试用例:电梯、杯子、桌子、洗衣机
1.测试项目:电梯 需求测试:查看电梯使用说明书.安全说明书等 界面测试:查看电梯外观 功能测试:测试电梯能否实现正常的上升和下降功能.电梯的按钮是否都可以用: 电梯门的打开,关闭是否正常:报警装置是 ...
- 【AMAD】django-guradian -- 为Django加入单个对象级别的权限
动机 简介 个人评分 动机 django默认的permission系统就是将将能用的程度.默认授权会将一个数据表所有数据的权限都授予,而现实世界不是这样.很多时候,我们仅想授权数据的一小部分给用户. ...