【JavaScript 从零开始】表达式和运算符(2)
in运算符
in运算符希望它的左操作数是一个字符串或可以转换为字符串,希望它的右操作数是一个对象。
如果右侧的对象拥有一个名为做操作数值的属性名,那么表达式返回true,例如:
var point= {x:1 , y:1 }; //定义一个对象
"x" in point //=>true: 对象有一个名为"x"的属性
"z" in point //=>false: 对象不存在名为"z"的属性
"toString" in point //=>true :对象继承了toString()方法
var data= [7,8,9]; //拥有三个元素的数组
"0" in data //=>true: 数组包含元素"0"(数字零)
1 in data //=>true: 数字转化为字符串
3 in data //=>false:没有索引为3的元素
eval()
为什么要 eval这里要添加 “("("+data+")");//”呢?
原因在于:eval本身的问题。
由于json是以”{}”的方式来开始以及结束的,在JS中,它会被当成一个语句块来处理,所以必须强制性的将它转换成一种表达式。
加上圆括号的目的是迫使eval函数在处理JavaScript代码的时候强制将括号内的表达式(expression)转化为对象,
而不是作为语句(statement)来执行。
举一个例子,例如对象字面量{},如若不加外层的括号,那么eval会将大括号识别为JavaScript代码块的开始和结束标记,那么{}将会被认为是执行了一句空语句。所以下面两个执行结果是不同的:
alert(eval("{}"); // return undefined
alert(eval("({})"); // return object[Object]
对于这种写法,在JS中,可以到处看到。
如: (function()) {}(); 做闭包操作时等。
条件运算符(? :)
条件运算符是JavaScript 中唯一的一个三元运算符(三个操作数),有时直接称作“三元运算符”。
通常这个运算符写成 "? :" ,当然在代码中往往不会这么简写,因为这个运算符拥有三个操作数,
第一个操作数在“?”之前,第二个操作手在 “?” 和 “:” 之间,第三个操作数在“:”之后。
greeting= "hello "+ (username ? username : "there");
//这和下面使用if语句的代码是等价的,但显然上面更加简洁:
greeting ="hello ";
if (username)
greeting +=username;
else
greeting +="there";
typeof运算符
typeof是一元运算符,放在耽搁操作数的前面,操作手可以说任意类型,返回值为表示操作数类型的一个字符串。
任意值在typeof运算符后的返回值
x typeof x
undefuned "undefined"
null "object"
true或false "boolean"
任意数字或NaN "number"
任意字符串 "string"
任意函数 "function"
任意内置对象(非函数) "object"
typeof运算符可以带上圆括号,这让typeof 看起来像一个函数名,而不是运算符关键字
typeof(x)
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={1,2}
还有一些需要注意的 ,不能删除通过var声明的变量
例如:
var o= {x:1 , y:2}; //定义一个变量,初始化为对象
delete o.x; //删除一个对象属性,返回true
typeof o.x; //属性不存在,返回“undefined”
delete o.x; //删除不存在的属性,返回true
delete o; //不能删除通过var声明的变量,返回 false,严格模式下将抛出异常
delete 1; //参数不是一个左值 返回 true
this.x = 1; //给全局对象顶一个属性,这里没有用 var
delete x; //试图删除它,非严格模式下返回true ,严格模式下会抛出异常 ,使用“delete this.x ”代替
x ; //运行时错误,没有定义x
【JavaScript 从零开始】表达式和运算符(2)的更多相关文章
- Javascript权威指南——第二章词法结构,第三章类型、值和变量,第四章表达式和运算符,第五章语句
第二章 词法结构 一.HTML并不区分大小写(尽管XHTML区分大小写),而javascript区分大小写:在HTML中,这些标签和属性名可以使用大写也可以使用小写,而在javascript中必须小写 ...
- Javascript学习2 - Javascript中的表达式和运算符
原文:Javascript学习2 - Javascript中的表达式和运算符 Javascript中的运算符与C/C++中的运算符相似,但有几处不同的地方,相对于C/C++,也增加了几个不同的运算符, ...
- JavaScript深入浅出补充——(一)数据类型,表达式和运算符
项目基本做完,在进行下一阶段学习之前先看视频学习回顾一下JavaScript 一.数据类型 JavaScript中有五种原始类型和一种对象类型 JavaScript弱类型语言中隐式转换 num-0 字 ...
- 笔记《JavaScript 权威指南》(第6版) 分条知识点概要3—表达式和运算符
[表达式和运算符]原始表达式,初始化表达式(对象和数组的),函数定义表达式,属性访问表达式,调用表达式,对象创建表达式,运算符概述,算术表达式,关系表达式,逻辑表达式,赋值表达式,表达式计算,其他运算 ...
- Python基础0:变量 赋值 表达式和运算符
变量: 前面我们在使用print()输出内容的时候,如果内容很长,后面要再次输出的时候,就需重新在输入一遍. 如果给输出的内容起个简单的别名.这样我们用简短的别名来代替长内容,下次要输出的时候就直接使 ...
- C#图解教程 第八章 表达式和运算符
表达式和运算符 表达式字面量 整数字面量实数字面量字符字面量字符串字面量 求值顺序 优先级结合性 简单算术运算符求余运算符关系比较运算符和相等比较运算符递增运算符和递减运算符条件逻辑运算符逻辑运算符移 ...
- Python3基础-表达式和运算符
表达式和运算符 什么是表达式? 1+2*3就是一个表达式,这里的加号和乘号叫做运算符,1.2.3叫做操作数. 1+2*3经过计算后得到的结果是7,我们可以将计算结果存放在一个变量里,result=1+ ...
- Python --表达式和运算符
表达式 由一个或者几个数字或者变量和运算符组合成的一行代码 通常会返回一个结果 运算符 由一个以上的值经过变化得到新值的过程就叫做运算 用于运算的符号称为运算符 运算符的分类: 算数运算符 比较或者关 ...
- 【JavaScript 从零开始】表达式和运算符(1)
原始表达式 最简单的表达式是"原始表达式"(primary expression).JavaScript中的原始表达式包含常量或直接量.关键字和变量. // 常量或直接量 1.23 ...
随机推荐
- sql 中如何查询某一列的数据在另一个表中有没有?
假设表table1,列a,表table2,列bselect a from table1where a not in(select b from table2)
- ASP.NET Core 2 学习笔记(二)生命周期
要了解程序的运行原理,就要先知道程序的进入点及生命周期.以往ASP.NET MVC的启动方式,是继承 HttpApplication 作为网站开始的进入点,而ASP.NET Core 改变了网站的启动 ...
- winform 批量控件取值赋值
以前写winform 最多写几个文本框,最近需要入录一个人员信息,那好几十个字段,一下子干蒙了,这要是一个个取值赋值都写到明天了,于是就自己写了个方法,也不是什么高大上的,就是很简单很普通很low的方 ...
- nginx 场景业务汇总 (中)
本文链接:http://www.cnblogs.com/zhenghongxin/p/8906225.html,如果可以,请阅读上篇 <nginx场景业务汇总(初)> (十三)负载均衡 轮 ...
- python的super用法及含义
注释:以下都是在python2.7版本验证的 总括:1.python解决二义性问题,经历了深度优先算法.广度优先算法.拓扑排序算法,目前python的版本都是使用拓扑算法(C3) 2.严谨sup ...
- java中关键字static和final
面向对象的不足 凡是有利必有弊,强对象编程,使得语法简单统一,但也有其缺点,而且有很多.我们在接下来的课程里会一点点接触到.我们今天先看第一个. 有些变量和函数确实没必要定义在一个类里.强行规定这些函 ...
- python3模块: sys
一.简介 sys模块用于提供对python解释器的相关操作. 二.常用函数 sys.argv 命令行参数List,第一个元素是程序本身路径 sys.modules 返回系统导入的模块字段,key是模块 ...
- 目标检测算法—YOLO-V1
为什么会叫YOLO呢? YOLO:you only look once.只需要看一眼,就可以检测识别出目标,主要是突出这个算法 快 的特点.(原文:Yolo系列之前的文章:主要是rcnn系列的,他们的 ...
- WebDriverAPI(3)
获取页面的Title属性 被测网址http:http://www.baidu.com Java语言版本的API实例代码 String url = "http://www.baidu.com& ...
- DIV居中的几种方法
1. body{ text-align:center; } 缺点:body内所有内容一并居中 2. .center{ position: fixed; left: 50%; } 缺点:需要设置posi ...