相等操作符

  • 相等和不相等
    在转换不同的数据类型时,相等和不想等操作符遵循下面基本规则:
  1. 如果有一个操作符数是布尔值,则在比较相等性之前先将其转换为数值——false转换为0,而true转换为1;
  2. 如果一个操作数是字符串,而另一个操作数是数值,在比较相等性之前先将字符串转化为数值;
  3. 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较。
    这两个操作符在进行比较时则要遵循下列规则:

    • null和undefined是相等的。
    • 要比较相等性之前,不能将null和undefined转换成其他任何只。
    • 如果有一个操作数是NaN,则相等操作符返回false,而不相等操作符返回true。即使两个操作数都是NaN,相等操作符也返回false,因为按照规则,NaN不等于NaN.
    • 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true;否则,返回false。
  • 全等和不全等
    全等操作符由3个等于好(===)表示,它只在两个操作数未经转换就相等的情况下返回true,如下:
  1. var result1 =("55"==55);// true,因为转换后相等
  2. var result2 =("55"===55);// false,因为不同数据类型不相等

语句

  • for-in语句
    for-in语句是一种精准的迭代语句,可以用来枚举对象的属性。for-in语句的语法:
    for (property in expression) statement
    ECMAScript对象的属性没有顺序,因此,通过for-in循环输出的属性名的顺序是不可预测的,所有属性都会被返回一次,但返回的先后次序可能会因浏览器而异。
  • with语句
    with语句的作用是将代码的作用域设置到一个特定的对象中。with语句的语法:
    with (expression) statement;
    定义with语句的目的主要是为了简化多次编写同一个对象的工作,如下面的例子:
  1. var qs = location.search.substring(1);
  2. var hostName = location.hostname;
  3. var url = location.href;

上面几行代码都包含location对象。如果使用with语句,可以把上面的代码改写成如下形式:

  1. with(location){
  2. var qs = search.substring(1);
  3. var hostName = hostname;
  4. var url = href;
  5. }

这意味着在with语句的代码库内部,每个变量首先被认为是一个局部变量,而如果在局部变量中找不到该变量的定义,就会查询location对象是否由同名的属性,如果发现了同名属性,则以location对象属性的值作为变量的值。
严格模式下不允许使用with语句,否则将视为语法错误。
有序大量使用with语句会导致性能下降,同时也会给调试代码造成困难,因此在开发大型应用程序时,不建议使用with语句。

函数

ECMAScript中的函数在定义时不必指定是否返回值。函数在任何时候都可以通过return语句后跟要反悔的值来实现返回值。位于return语句之后的任何代码都永远不会执行,例如:

  1. function sum(num1,num2){
  2. return num1 + num2;
  3. alert("Hello world");// 永远不会执行
  4. }

一个函数也可以包含多个return语句,例如:

  1. function diff(num1,num2){
  2. if(num1 < num2){
  3. return num2 - num1;
  4. }else{
  5. return num1 - num2;
  6. }
  7. }

这个函数用于计算两个数值的差。
另外,return语句也可以不带有任何的返回值。这种情况下,函数在停止执行后返回undefined值。这种做法一般用在需要提前停止函数执行而不需要返回值的情况下。

  1. function sayHi(name,message){
  2. return;
  3. alert("Hello "+ name +","+ message);// 永远不会执行
  4. }

推荐的做法是要么让函数始终都返回一个值,要么永远都不要返回值。
严格模式对函数的一些限制:

  1. 不能把函数命名为eval或arguments;
  2. 不能把参数命名为eval或arguments;
  3. 不能出现两个命名参数同名的情况。
    如果发生以上情况,就会导致语法错误。

  • 理解参数:
    ECMAScript函数不介意传递来多少个参数,也不在乎传进来参数是什么数据类型。原因是ECMAScript中的参数在内部使用一个数组表示的。函数接收到的始终都是这个数组,而不关心数组中包含哪些参数(如果有参数的话。),实际上,在函数体内可以通过arguments对象来访问这个参数数组,从而获取传递给函数的每一个参数。
    arguments对象只是与数组类似(它并不是Array的实例),因为可以使用方括号方位它的每一个元素,使用length属性来确定传递进来多少个参数。
    前面的例子中,sayHi()函数的第一个参数名字叫name,而该参数的值也可以通过访问argument[0]来获取。因此,函数可以被改写为:

  1. function sayHi(){
  2. alert("Hello "+ arguments[0]+","+ arguments[1]);
  3. }

这个事例反映了ECMAScript函数的一个重要特点:命名的参数只提供便利,但不是必需的。
通过访问arguments对象的length属性可以获知有多少个参数传递给了函数,可以利用这点让函数能够接收人一个参数并分别实现适当的功能。

  1. function doAdd(){
  2. if(arguments.length ==1){
  3. alert(arguments[0]+10);
  4. }elseif(arguments.length ==2)
  5. {
  6. alert(arguments[0]+ arguments[1]);
  7. }
  8. }
  9. doAdd(10);// 20
  10. doAdd(30,20);// 50

arguments对象可以与命名参数一起用,如:

  1. function doAdd(num1,num2){
  2. if(arguments.length ==1){
  3. alert(num1 +10);
  4. }elseif(arguments.length ==2)
  5. {
  6. alert(arguments[0]+ num2);
  7. }
  8. }

arguments的值永远与对应命名参数的值保持同步,例如:

  1. function doAdd(num1,num2){
  2. arguments[1]=10;
  3. alert(arguments[0]+ num2);
  4. }

每次执行doAdd()函数都会重写第二个参数,将其改为10.但这种影响是单向的,修改命名参数不会改变arguments中对应的值。如果只传入一个参数,那么为arguments[1]设置的值不会反映到命名参数。
没有传递值的命名参数将自动被赋予undefined值。例如,如果只给doAdd()函数传递了一个参数,则num2中就会自动保存undefined值。
严格模式下,不能像前面例子哪样赋值,会无效,就是说,即使将arguments[1]设置为10,num2的值仍然还是undefined。重写arguments的值会导致语法错误(代码将不会执行)。
ECMAScript中的所有参数传递的都是值,不可能通过引用传递参数。

  • ECMAScript函数没有重载
    如果在ECMAScript中定义了两个名字相同的函数,则该名字只属于后定义的函数。
  1. function addSomeNumber(num){
  2. return num +100;
  3. }
  4. function addSomeNumber(num){
  5. return num +200;
  6. }
  7. var result = addSomeNumber(100);// 300

如前所述,通过检查传入函数中参数的类型和数量并作出不同的反应,可以模仿方法的重载。
ECMAScript中的函数与其他语言中的函数有诸多不同之处:

  • 无须指定函数的返回值,因为任何ECMAScript函数都可以在任何时候返回任何值。
  • 实际上,未指定返回值的函数返回的是一个特殊的undefined值。
  • ECMAScript中也没有函数签名的概念,因为其函数参数是以一个包含零或多个值的数组的形式传递的。
  • 可以想ECMAScript函数传递任意数量的参数,并且可以通过arguments对象来访问这些参数。
  • 由于不存在函数签名的特性,ECMAScript函数不能重载。

《JavaScript高级程序设计(第三版)》-3的更多相关文章

  1. 百度实习生,以修仙者的角度聊聊怎么学MySQL,不来看看你的修为如何吗?

    目录 因为我个人比较喜欢看修仙类的小说,所以本文的主体部分借用修仙者的修为等级,将学习旅程划分成:练气.筑基.结丹.元婴.化神.飞升六个段位,你可以看下你大概在哪个段位上哦! 本文目录: 我为什么要写 ...

  2. 自导自演的面试现场,趣学MySQL的10种文件

    导读 Hi,大家好!我是白日梦!本文是MySQL专题的第 24 篇. 今天我要跟你分享的MySQL话题是:"自导自演的数据库面试现场--谈谈MySQL的10种文件" 换一种写作风格 ...

  3. DF学Mysql(二)——数据表的基本操作

    1.创建数据表 先使用“USE <数据库名>”指定在哪个数据库中操作 CREATE TABLE <表名> ( 字段1 数据类型 [列级别约束条件] [默认值], 字段2 数据类 ...

  4. 从零开始学MySQL(二)

    鉴于上节篇幅以安装为主,因此对于调用mysql所需要使用的“命令”只是略微提及.随之而来就会带给读者诸多不解了,因为你会思考,这串长长的字符到底有什么特殊的含义呢?聪明的你可能早就抱着好奇心去“摆渡” ...

  5. 从零开始学MySQL(四)

    上节连接:https://www.cnblogs.com/RajXie/p/10880809.html 上节说到,在创建表的同时,需要给出列的定义.列的定义可展开如下: 列名 列的数据类型 列的一些其 ...

  6. Java必学MySQL数据库应用场景

    Java教程分享Java必学之MySQL数据库应用场景,在当前的后台开发中,MySQL应用非常普遍,企业在选拔Java人才时也会考察求职者诸如性能优化.高可用性.备份.集群.负载均衡.读写分离等问题. ...

  7. DF学Mysql(三)——Mysql数据类型

    Mysql数据类型分为:整数类型.浮点数类型.定点数类型日期与时间类型字符串类型二进制类型 整数类型 字节数 无符号数取值范围 有符号数取值范围TINYINT 1 0-255 -128-127SMAL ...

  8. DF学Mysql(三)——索引操作

    概要: 数据库对象索引其实与书的目录非常相似,主要是为了提高从表中检索数据的速度. 由于数据存储在数据库表中,所以索引是创建在数据库表对象上的,由表中的一个字段或多个字段生成的键组成,这些键存储在数据 ...

  9. 这半年时间学Mysql的总结

    一条sql语句的执行流程 select * from t where id=1 1.mysql执行一条查询语句的流程 1.1客户端输入用户名密码连接mysql服务器 1.2查询这条sql语句有没有对应 ...

  10. 《一起学mysql》4

    索引的使用   索引太少返回结果很慢,但是索引太多,又会占用空间.每次插入新记录时,索引都会针对变化重新排序   什么时候使用索引 1.where 从句中用到的字段  select * from tb ...

随机推荐

  1. android 签名相关

    查看keystorekeytool -list -v -keystore debug.keystoreapk签名不带别名 apksigner sign --ks debug.keystore test ...

  2. asp.net mvc access数据库操作

    连接access数据库其实也简单,只要按照mvc的模式来就可以,遵循c v约定就可以 既然渲染试图是强类型,那么取得的数据就转换成强类型,其他一切和asp.net操作一样 DB mydb = new ...

  3. vs2017 asp.net FriendlyUrls 新特性

    这个包如何使用呢?其实很简单,只需将nuget包添加到项目中,再调用routes.EnableFriendlyUrls(),你就可以通过/Foo来访问/Foo.aspx了!你也能够利用URL片段将更多 ...

  4. 初试Gevent – 高性能的Python并发框架

    Gevent是一个基于greenlet的Python的并发框架,以微线程greenlet为核心,使用了epoll事件监听机制以及诸多其他优化而变得高效. 于greenlet.eventlet相比,性能 ...

  5. Python 函数内省

    函数内省(function introspection) 除了__doc__属性, 函数对象还有很多属性,对于下面的函数,可以使用dir()查看函数具有的属性: def factorial(n): r ...

  6. BFC的表象认识

    首先字面翻译,这三个字母分别代表什么,box,formatting, context,它决定了元素如何对其内容进行定位,以及与其他元素的关系和相互作用. 形象点就是说一种规范,规范什么呢?规范盒子内部 ...

  7. Intense Heat(前缀和或尺取)

    The heat during the last few days has been really intense. Scientists from all over the Berland stud ...

  8. Lucky Conversion(找规律)

    Description Petya loves lucky numbers very much. Everybody knows that lucky numbers are positive int ...

  9. c# 免费版pdf转word尝试

    链接:https://pan.baidu.com/s/1Dwuezo6YGe9CdlSyrwQyNg 密码:c81a 1.安装此程序 2.在安装文件的bin下拷贝dll: 3.代码引用 private ...

  10. 电梯V2.0

    电梯V2.0 GitHub仓库地址 Problem 一栋10层的大楼(楼层编号1-10),设3台无限载重的电梯,初始时电梯停在1层.其中:1号电梯只能停留在奇数层,2号电梯可以各层都停留,3号电梯只停 ...