本阶段难点疑点梳理

1、关于switch中default的使用:

  default同case功能一样,区别在于并不匹配任何信息,只有当case中无任何匹配的时候才会执行default。需要注意的是,这是在default放在所有case语句最后面的情况下。放在前面不可以吗?大多数初学者几乎都没有注意过这个问题,答案是可以。default语句同case语句一样,需要break语句来终止,这才是我们忽略的重点,在之前的学习中,不管是网上教程,还是老师课上讲的内容,几乎都没有涉及到default的位置问题,如果将default放置在所有case语句前,在不加break的情况下,尽管没有与case匹配成功的语句,default语句后面的case语句一样会执行,这一样被称作“switch穿透”。 

总结:default没有终止switch的功能,依然需要添加break。

2、关于代码短路

  在if、while、for等各种判断语句的判断条件中,可能会出现类似以下这样的判断条件:

 var x,y;
 if( (x=10) || (y=20)){    alert(x+y); } 

赋值语句一样可以用来当作if中的判断条件,x=10返回值为10,表示为真,y=20返回值为20,也表示为真。但是,重点来了,上面的代码运行结果为 NAN。

为什么呢?因为出现了代码短路问题。啥是代码短路嘞,其实就是后面的不执行了,就像电路短路了,不工作了。出现这样的情况的原因,就在这个 “ | | ”或运算符上。这个运算符有个特点,只要它两边的语句其中一条为真即为真。但是计算机不会两边都去判断,而是从左到右的顺序去看,如果左边一条为真了,计算机就认为这个判断条件已经成立了,当然就不会继续判断右边的语句。只有在左边的语句不为真的情况下,才会执行到右边的语句。因此,短路就出现了,y变量只声明而并没有给他赋值,在js中经过预解析之后默认是undefined(undefined不是字符串类型),所以后面的alert弹窗输出的理所当然就是 NAN了 ~。

3、关于for循环语句

  平时用for循环语句的时候,for()括号中的三条语句都会写,很少用到不写的情况。我这样说是因为不写也可以。例如这样:

for (;;) { }

这是一个死循环。嗯,这得记住咯,好像公司面试题里面这样的情况会很多,尽管几乎用不到。那么,为什么这会是一个死循环呢?for中啥也没写啊。

它其实可以理解为长这样:

for(初态;终态;步长){循环体;}

可是现在初态和终态都没有给,for循环就认为要一直执行下去,除非循环体中有break,return或者抛出异常之后才会终止。

还有:

//这样
for(;1;){};
//和这样
for(;(1);){}

其结果都和while(true){}是一样的,死循环。1 和 (1)对于判断来说都是真。

4、关于局部变量和全局变量

考试遇到这么一个题:

 var a = 1;    var b = 1;
 function fn() {
     var a = b = 3;
     alert(a);
     alert(b);
 }
 fn();
 alert(a);
 alert(b);

没见过的同学一定要仔细考虑一下,答案是:3 3 1 3 。

  关键语句在fn函数中的 var a = b = 3; 这一条。学习时声明一个新的变量一般都是 var a=3;var b =3;但是一定要搞明白,这两种写法是完全不相同的。

实际上黄色背景色的语句等价为: var a=3;b=3;说到这里大家就应该明白这个题目考察的内容了,” b “ 作为一个全局变量被重新赋值为3,而 ” a “ 在fn函数中作为一个局部变量被定义且赋值为3。答案也就明了了。

  还有一个问题,JS中对新变量的声明不像c、java那么严格,必须声明类型,否则就会报错。JS允许开发者不写 ” var “ 关键字。但是必须要注意的一个问题就是,这样声明的变量将是一个全局变量,哪怕是在函数中创建的。

day04

1、调用任何一个函数的时候,如果前面加上new关键字,这个函数会变成构造函数,即这个函数会自动返回一个对象。

2、向数组添加元素:

  (1) arr[arr.lenght] (技巧写法,循环向最后添加)

  (2)arr.push() 向数组末尾追加一个或多个元素,并返回心的数组长度

  (3)arr.unshift() 向数组的开头添加一个或多个元素,并返回新的数组长度

  (4)arr.splice() 向数组中添加或删除元素,并返回一个新数组

3、从数组取出元素:

  (1) arr.pop() 删除并返回数组的最后一个元素。

  (2) arr.shift() 删除并返回数组的第一个元素

4、find()、findIndex()、some()、every()方法

  find():返回符合测试条件的第一个数组元素值,如果没有符合条件的则返回 undefined。

  

arr.find(function(item){
    return item == xxx ;
})

  

  findIndex():

    findIndex() 方法返回传入一个测试条件(函数)符合条件的数组第一个元素位置。

    findIndex() 方法为数组中的每个元素都调用一次函数执行:

    当数组中的元素在测试条件时返回 true 时, findIndex() 返回符合条件的元素的索引位置,之后的值不会再调用执行函数。

    如果没有符合条件的元素返回 -1

    注意: findIndex() 对于空数组,函数是不会执行的。

    注意: findIndex() 并没有改变数组的原始值。

  some()、every():

    every()与some()方法都是JS中数组的迭代方法。

    some()和every() 方法用于检测数组中的元素是否满足指定条件(函数提供)。

    some()和every()方法会依次执行数组的每个元素:

    some()方法如果有一个元素满足条件,则表达式返回true ,剩余的元素不会再执行检测。如果没有满足条件的元素,则返回false。

    every()方法如果有一个元素不满足条件,则返回false,剩余元素不会再执行检测。所有元素都符合条件,才会返回true

    注意:不会对空数组进行检测。

    注意:不会改变原始数组。

var s = arr.some(function(item){
    return item == xx;
});
var e = arr.every(function(item){
    return item == xx;
});

5、其他数组对象方法 :http://www.runoob.com/jsref/jsref-obj-array.html

课堂小记---JavaScript(2)的更多相关文章

  1. 课堂小记---JavaScript(4)

    day11 1.正则表达式 去掉首尾的空格或者其他字符 replace方法可传入函数可分组. 以下为分组 基础正则表达式语法: /** * 正则表达式是一个对象类型 */ // 匹配字符串中的che ...

  2. 课堂小记---JavaScript(3)

    操作DOM var newDOM=DOM元素.cloneNode(参数); 克隆(复制)当前节点,参数默认为false只复制当前节点元素.参数为true时复制当前元素及其后代和所有属性. day06 ...

  3. 课堂小记---JavaScript(1)

    day01 1.数据类型  number string boolean undefined object function 加号具有两种功能,数字相加 和 字符串拼接.加号两边只要碰见字符串,则执行字 ...

  4. 杨校老师课堂之JavaScript右下角广告弹框教程

    案例制作思路: 1.先制作界面 添加一个盒子包含一个按钮,使盒子绝对定位在右上角 添加一个大盒子,同理,将盒子居于左下角:其中内部包含一个顶端盒子和底部盒子 顶端盒子因为是属于大盒子内部的存在,所以宽 ...

  5. 杨老师课堂之JavaScript定时器_农夫山泉限时秒杀案例

    预览效果图: 使用到的知识点: 定时器 setInterval(函数,毫秒):在指定的毫秒数后调用函数或执行一段代码 取消定时器 clearInterval:取消由setInterval设置的定时器 ...

  6. javascript小记-javascript运行机制

    任何语言的运行过程中,都会有编译和执行: 对于传统编译型语言来说,编译步骤分为:词法分析.语法分析.语义检查.代码优化和字节生成.但对于解释型语言来说,通过词法分析和语法分析得到语法树后,就可以开始解 ...

  7. 松软科技Web课堂:重要->JavaScript 调试

    错误总会发生,每当您写一些新的计算机代码时. JavaScript 调试 在没有调试器的情况下写 JavaScript 是有难度的. 您的代码中也许包含了语法错误,或者逻辑错误,这些都难以诊断. 通常 ...

  8. 松软科技前端课堂:JavaScript 数值方法

    Number 方法帮助您处理数值. Number 方法和属性 原始值(比如 3.14 或 2016),无法拥有属性和方法(因为它们不是对象). 但是通过 JavaScript,方法和属性也可用于原始值 ...

  9. 松软科技前端课堂:JavaScript 对象

    真实生活中的对象.属性和方法 在真实生活中,汽车是一个对象. 汽车有诸如车重和颜色等属性,也有诸如启动和停止的方法: 对象 属性 方法   car.name = porsche car.model = ...

随机推荐

  1. C++11 std::move和std::forward

    下文先从C++11引入的几个规则,如引用折叠.右值引用的特殊类型推断规则.static_cast的扩展功能说起,然后通过例子解析std::move和std::forward的推导解析过程,说明std: ...

  2. 对filter的初步认识

    Filter 技术是servlet 2.3  新增加的功能.servlet2.3是sun公司 于2000年10月发布的,它的开发者包括许多个人和公司团体,充分体现了sun公司所倡导的代码开放性原则.在 ...

  3. idea 错误: 找不到或无法加载主类

    1.cmd进入项目目录 2.输入maven命令重构项目 mvn clean mvn idea:idea install

  4. Kubernetes基本功能

    说明 目前kubernetes的资料介绍很多也很深刻,本文只是做一个针对自己学习k8s过程的介绍,仅仅是学习笔记的记录. 一.基本使用 1. 命令行 集群信息 Namespace 信息 Control ...

  5. [Luogu P1119]灾后重建

    这是一道考Floyd本质的题. 回忆一下Floyd的原理,三层循环,最外层循环枚举的是中转点,也就是用两点到中转点距离之和来更新最短路.然后来看下题目,重建时间是按照从小到大排序的,也就是说,当第i个 ...

  6. (Python3) 求中位数 代码

    def zhongweishu(a): new=sorted(a) if len(a)%2==0: s=(new[int(len(a)/2-1)]+new[int(len(a)/2)])/2 else ...

  7. 课程设计个人报告——基于ARM实验箱的捕鱼游戏的设计与实现

    课程设计个人报告--基于ARM实验箱的捕鱼游戏的设计与实现 一.个人贡献 参与课设题目讨论及部分过程 资料收集 负责代码调试 捕鱼游戏相应功能的实现 实验环境 Eclipse软件开发环境: ARM实验 ...

  8. P3203 [HNOI2010]弹飞绵羊

    LCT裸题,之后填坑打一下 分块做法:每个点存几次出块以及出块的位置,问的时候直接暴力跳就vans了 首先思考最普通的模拟,发现可以O(n)路径压缩,O(1)的查询,但是需要修改就变成了O(n^2)的 ...

  9. vue 移动端项目总结(mint-ui)

    跨域解决方案 config/dev.env.js 'use strict' const merge = require('webpack-merge') const prodEnv = require ...

  10. MySQL保留字不能作为字段名使用

    在设计MySQL字段的时候,无意中使用InOut这个名称作为字段名称,结果前端提交后就是没有写入数据库!但后端没有任何提示,跟踪mySQL日志,也没有留下痕迹,反复查,不得其解. 后来实在没有办法情况 ...