比较运算符in/instanceof/typeof 逻辑表达式||/&&
1.比较运算符in
in运算符希望它的左侧操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象,
如果右侧的对象拥有一个名为左侧操作数值的属性名,那么表达式返回true,
eg:var arr = {x:1,y:2};
"x" in arr ==>true
"toString" in arr ==>对象继承了toString()方法
var data = [1,2,3];
"0" in data ===>true
3 in data ===>false 数组的下标是以0开始的,下标只到2
2.比较运算符instanceof
instanceof运算符希望左侧操作数是一个对象,右操作数标识对象的类
如果左侧的对象是右侧类的实例则返回true,js中对象的类是通过初始化他们的构造函数来定义的
var a = [];
function f(){};
var o = new f();
o.constructor == f; o.__proto__.constructor == f; //true
f instanceof Function;//true
f instanceof Object;//true
a instanceof Array;//true
3.typeof运算符
typeof是一元运算符,放在其单个操作数前面,操作数可以是任意类型,返回值为表示操作数类型的一个字符串,
任意值在typeof运算后的返回值
x | typeof x||typeof(x) |
undefined | "undefined" |
null | "object" |
true或false | "boolean" |
任意数字或NaN | "number" |
任意字符串 | "string" |
任意函数 | "function" |
任意内置对象(非函数) | "object" |
任意宿主对象 | "由编译器各自实现的字符串" |
4.逻辑表达式
4.1 && 表达式
1.当操作数都是布尔值的时候,"&&"对两个值执行布尔与(and)操作,只有在第一个操作和第二个操作都是true的时候,它才返回true
2."&&"可以对假值(false、null、undefined、0、-0、NaN、"")和真值(除假值外的都是真值)进行布尔与(and)操作,
先会对"&&"的左侧进行操作,如果左侧是假值,整个表达式肯定也是假值,因此这个表达式就简单的返回左侧的这个值,不会对右侧计算,
反之如果左侧是真值,则整个表达式的计算结果依赖于右侧,右侧是真值这个结果就是真值,否则就是假值,并返回右侧的值作为整个表达式的结果
"&&"的这种特性称为"短路",也经常利用这种特性来有条件的执行代码
eg: if(a==b) start();
(a==b) start();//同上
一般当"&&"的右侧有副作用是要小心如(赋值、递增、递减等),因为这些操作的执行与否都依赖与"&&"的左侧 false&&a++(a++就不会执行)
4.2 ||表达式
"||"对两个操作做 布尔或(or)运算,只要有一个操作时真值,则返回真值,当且仅当所有操作都是假值是才会返回假值;
先会对"||"的左侧进行操作,如果左侧是真值,整个表达式肯定也是真值,因此这个表达式就简单的返回左侧的这个值,不会对右侧计算,
反之如果左侧是假值,则整个表达式的计算结果依赖于右侧,右侧是真值这个结果就是真值,否则就是假值,并返回右侧的值作为整个表达式的结果
比较运算符in/instanceof/typeof 逻辑表达式||/&&的更多相关文章
- javascript特殊运算符(in,instanceof,typeof,delete,void,逗号)
in运算符 in运算符要求其左边的运算数是一个字符串,或可以被转换为字符串,右边的运算数十一个对象或数组.如果该 运算符左边的值是右边对象的一个属性名,则返回true, ...
- 关系运算符:instanceof
关系运算符:instanceof a instanceof Animal;(这个式子的结果是一个布尔表达式) a为对象变量,Animal是类名. 上面语句是判定a是否可以贴Animal标签.如果可以贴 ...
- JavaScript中“typeof”运算符与“instanceof”运算符的差异
在JavaScript中,运算符“typeof”和“instanceof”都可以用来判断数据的类型,那么这两个运算符有什么不同之处呢? 差异一:使用方式不同. 最明显的差异就是这两个运算符的使用方式了 ...
- instanceof typeof
//清单 6. JavaScript instanceof 运算符代码 function instance_of(L, R) {//L 表示左表达式,R 表示右表达式 var O = R.protot ...
- javascript instanceof,typeof的区别
区分string 与 String的区别 为什么结果会是false呢? <script type="text/javascript"> var aColors = [& ...
- instanceof, typeof, & Object.prototype.toString
/** * * @authors Your Name (you@example.org) * @date 2016-11-18 09:31:23 * @version $Id$ */instanceo ...
- js的in运算符与instanceof运算符
in运算符:希望他的左操作数是一个字符串或可以转换为字符串,希望他的右操作数是一个对象.如果右操作数的对象拥有一个名为左操作数值的属性名,那么表达式返回true. var point= {x:1,y: ...
- JavaScript中instanceof与typeof运算符的用法及区别详细解析
JavaScript中的instanceof和typeof常被用来判断一个变量是什么类型的(实例),但它们的使用还是有区别的: typeof 运算符 返回一个用来表示表达式的数据类型的字符串. typ ...
- typeof和instanceof
JavaScript 中 typeof 和 instanceof 常用来判断一个变量是否为空,或者是什么类型的.但它们之间还是有区别的: typeof typeof 是一个一元运算,放在一个运算数之前 ...
随机推荐
- hdu5646(数学)
小学数学,脑补 一开始看到这题,猜了个规律想写但是我是拒绝的. 因为我无法证明. 好吧,主要还是小学数学没学好吧. 要理解这题,首先得搞懂一个重要问题.假设C=A+B,怎样选择两个正整数使得A*B最大 ...
- 【BZOJ2034】[2009国家集训队]最大收益 贪心优化最优匹配
[BZOJ2034][2009国家集训队]最大收益 Description 给出N件单位时间任务,对于第i件任务,如果要完成该任务,需要占用[Si, Ti]间的某个时刻,且完成后会有Vi的收益.求最大 ...
- 【BZOJ4444】[Scoi2015]国旗计划 双指针+倍增
[BZOJ4444][Scoi2015]国旗计划 Description A国正在开展一项伟大的计划——国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形 ...
- 单片机教程4.C语言基础以及流水灯的实现
单片机教程4.C语言基础以及流水灯的实现 C语言,没接触过计算机编程语言的人会把它看的很神秘,感觉非常的难,而在我看来,C语言的逻辑和运算,就是小学水平,所以大家不要怕它,我尽可能的从小学数学逻辑方式 ...
- 对django模型中的objects的理解
object是模型属性,用于模型对象和数据库交互. object=Manager()是管理器类型的对象,是model和数据库进行查询的接口 可以自定义管理对象 books=models.Manager ...
- delphi下webbrowser的应用
查找操作tagName为input的对象var i:Integer; myole:oleVariant; begin myole := wb1.Document; for i := 0 to myol ...
- MySQL中lock与latch的区分
这里要区分锁中容易令人混淆的概念lock与latch.在数据库中,lock与latch都可以成为锁,但两者有截然不同的含义 latch 一般称为闩锁(轻量级的锁) 因为其要求锁定的时间非常短,若迟勋时 ...
- linux安装jdk_1.8
转载自http://blog.csdn.net/ldl22847/article/details/7605650 1.下载jdk的rpm安装包,这里以jdk-8u141-linux-x64.rpm为例 ...
- MDF损坏或LDF文件损坏
MDF损坏或LDF损坏 MDF丢失或LDF丢失 注意,这些情况必须要相同版本的sql server才能操作成功 当MDF损坏时 1.备份结尾日志 http://www.cnblogs.com/gere ...
- DataTable Group By或运算 Linq Aggregate的使用
class Program { static void Main(string[] args) { DataTable dt = new DataTable(); dt.Columns.Add(&qu ...