【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 ...
随机推荐
- 20164317 《网络对抗技术》Exp5 MSF基础应用
基础问题回答 (1)用自己的话解释什么是exploit,payload,encode. exploit: 是指攻击者或渗透测试者利用一个系统.应用或服务中的安全漏洞所进行的攻击行为, 包括利用缓冲区溢 ...
- Mac OS 10.12 - 安装任何来源软件!!
今天想安装一个从网上下载的软件到Mac OS 10.12中,结果没有想到Mac告诉我那个软件已经损坏,害得我删除了!! 最后通过热心网友的帮助,顺利解决了这个安装问题,重新安装并且使用上了这款软件,下 ...
- 769. Max Chunks To Make Sorted
Given an array arr that is a permutation of [0, 1, ..., arr.length - 1], we split the array into som ...
- arya-sites模块的主要类
Site类,生成路由, - 方法:url,get_urls, register, login,logout - 字段:_registry = {} Config,基础配置类,主要用 ...
- Recursion-687. Longest Univalue Path
Given a binary tree, find the length of the longest path where each node in the path has the same va ...
- poj1220------高精度进制转换模板
#include<iostream> #include<cstdio> #include<cstring> using namespace std; const i ...
- webpack初学者(1)
最近在学习webpack的总结,不完善的希望各位提出宝贵的建议.本篇是以webpack3.0版本为基础的学习总结. 一.webpack的概念及作用 wepack是一个模块打包兼优化工具.往往一个项目中 ...
- day 53 Django form 组件 autu 组件
https://github.com/Endless-Clould/homework/tree/master/auto_zujian ---恢复内容开始--- 前情提要: Django 组件 的 fo ...
- 导入不用的css文件及在不同设备显示不用的html页面
当一个页面对应有多个css样式文件时,我们可以根据地址栏的参数值而导入不同的css文件: function getCss() { var linkNode = document.createEleme ...
- 【NOIP2013】货车运输 最大生成树+倍增
题目大意:给你一张n个点m条边的图,有q次询问,每次让你找出一条从x至y的路径,使得路径上经过的边的最小值最大,输出这个最大的最小值. 显然,经过的路径必然在这张图的最大生成树上. 我们求出这个图的最 ...