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)的更多相关文章

  1. Javascript权威指南——第二章词法结构,第三章类型、值和变量,第四章表达式和运算符,第五章语句

    第二章 词法结构 一.HTML并不区分大小写(尽管XHTML区分大小写),而javascript区分大小写:在HTML中,这些标签和属性名可以使用大写也可以使用小写,而在javascript中必须小写 ...

  2. Javascript学习2 - Javascript中的表达式和运算符

    原文:Javascript学习2 - Javascript中的表达式和运算符 Javascript中的运算符与C/C++中的运算符相似,但有几处不同的地方,相对于C/C++,也增加了几个不同的运算符, ...

  3. JavaScript深入浅出补充——(一)数据类型,表达式和运算符

    项目基本做完,在进行下一阶段学习之前先看视频学习回顾一下JavaScript 一.数据类型 JavaScript中有五种原始类型和一种对象类型 JavaScript弱类型语言中隐式转换 num-0 字 ...

  4. 笔记《JavaScript 权威指南》(第6版) 分条知识点概要3—表达式和运算符

    [表达式和运算符]原始表达式,初始化表达式(对象和数组的),函数定义表达式,属性访问表达式,调用表达式,对象创建表达式,运算符概述,算术表达式,关系表达式,逻辑表达式,赋值表达式,表达式计算,其他运算 ...

  5. Python基础0:变量 赋值 表达式和运算符

    变量: 前面我们在使用print()输出内容的时候,如果内容很长,后面要再次输出的时候,就需重新在输入一遍. 如果给输出的内容起个简单的别名.这样我们用简短的别名来代替长内容,下次要输出的时候就直接使 ...

  6. C#图解教程 第八章 表达式和运算符

    表达式和运算符 表达式字面量 整数字面量实数字面量字符字面量字符串字面量 求值顺序 优先级结合性 简单算术运算符求余运算符关系比较运算符和相等比较运算符递增运算符和递减运算符条件逻辑运算符逻辑运算符移 ...

  7. Python3基础-表达式和运算符

    表达式和运算符 什么是表达式? 1+2*3就是一个表达式,这里的加号和乘号叫做运算符,1.2.3叫做操作数. 1+2*3经过计算后得到的结果是7,我们可以将计算结果存放在一个变量里,result=1+ ...

  8. Python --表达式和运算符

    表达式 由一个或者几个数字或者变量和运算符组合成的一行代码 通常会返回一个结果 运算符 由一个以上的值经过变化得到新值的过程就叫做运算 用于运算的符号称为运算符 运算符的分类: 算数运算符 比较或者关 ...

  9. 【JavaScript 从零开始】表达式和运算符(1)

    原始表达式 最简单的表达式是"原始表达式"(primary expression).JavaScript中的原始表达式包含常量或直接量.关键字和变量. // 常量或直接量 1.23 ...

随机推荐

  1. RTOS双向链表数据结构

    在学习RTOS操作系统时,在任务优先级设置时用到了双向链表,说实话数据结构的东西只是停留在大学上课阶段,并未实践过,在操作系统中看得云里雾里,遂将其单独拿来了进行了一下思考,经过一个上午的摸索逐渐领会 ...

  2. XCode - 无法对iPhone真机调试的解决方法!

    OSX:10.14 XCode:10.1 真机:iPhone 4S 错误很多啊,并非编译错误,编译已经成功了,但是无法安装到真机,我真不理解啊!!由于真的没有想到能够解决,有的错误没有截图,先看部分错 ...

  3. FreePascal - CodeTyphon交叉编译,在一个操作系统生成各个操作系统可以运行的程序!

    致谢:[XE3]MN,让我加快完成了使用CodeTyphon进行交叉编译! CodeTyphon版本: 6.0 下载:http://www.pilotlogic.com/codetyphon/zips ...

  4. Educational Codeforces Round 26 A B C题

    题目链接 A. Text Volume 题意:计算句子中,每个单词大写字母出现次数最多的那个的出现次数(混不混乱QAQ). 解题思路:注意getchar()就没啥了. #include<cstd ...

  5. Sticky Fingure安装教程

    作者:小离 官方对应Sticky Finger Kali-Pi 的介绍: Sticky Fingers Kali-Pi – The pocket size, finger friendly, lean ...

  6. Spring配置项<context:annotation-config>的解释说明

    今天在闲逛CSDN论坛时,看到一位博主写的一篇关于<Spring中IOC的Annotation的实现>的文章, 于是点击进去看了下, 发现在说明中对Spring配置文件中的有些配置节点模凌 ...

  7. 编写 ES6 的 7 个实用技巧

    无脑翻译走一波~ Hack #1 - 变量交换 使用数组解构交换变量的值 let a = 'world', b = 'hello' [a, b] = [b, a] console.log(a) // ...

  8. iOS-WKWebview 带有进度条加载的ViewController【KVO监听Webview加载进度】

    前言 为什么要说 WKWebview,在之前做电子书笔记时已经提过 WKWebview 在iOS8之后已完全替代 Webview,原因就不多说了,主要还是内存过大: 封装 封装一个基于 UIViewC ...

  9. 如何解决liunx链接远程数据库10038错误提示

    关于在windows下链接liunx系统下远程数据库报错2003--提示10038的解决方案如下: 在liunx系统中安装配置mysql数据库默认是没有对外开启3600端口,如果出现10038: 1, ...

  10. leetcode-64-最小路径和

    题目描述: 给定一个包含非负整数的 m x n 网格,请找出一条从左上角到右下角的路径,使得路径上的数字总和为最小. 说明:每次只能向下或者向右移动一步. 示例: 输入: [  [1,3,1], [1 ...