3.6.运算符
运算符用于执行程序代码运算,会针对一个及其以上操作数来进行运算。
3.6.1.算数运算符
运算符 描述 例子 结果
+ 加 x=y+2 x=7
- 减 x=y-2 x=3
* 乘 x=y*2 x=10
/ 除 x=y/2 x=2.5
% 求余数 x=y%2 x=1
++ 自增(前导加、后导加) x=++y x=6
-- 自减(前导减、后导减) x=y-- x=4
3.6.2赋值和扩展运算符
运算符 例子 等价于 结果
= x=y x=5
+= x+=y x=x+y x=15
-= x-=y x=x-y x=5
*= x*=y x=x*y x=50
/= x/=y x=x/y x=2
%= x%=y x=x%y x=0
3.6.3.比较运算符
运算符 描述 例子
== 等于 x==8为false
=== 全等(值和类型) x===5为true; x==="5" 为false
!= 不等于 x!=8为true
> 大于 x>8为false
< 小于 x<8为true
>= 大于或等于 x>=8为false
<= 小于或等于 x<=8为true
3.6.4逻辑运算符
运算符 描述 例子
&& and (X< 10&&y> 1)为true
|| or (x==5 |y==5)为false
! not !(x==y)为true
3.6.5三目运算符
运算符 描述 例子
?: 如果..否则... 3>5?3:5
3.7控制语句
我们写的JavaScript代码都是按照从上到下依次执行,很多时候我们希望代码按照我们的意愿去执行,比如有选择性地执行某些代码,或者重复地执行某些代码,这就需要使用到流程控制语句。
流程控制语句一共有3 种:
1.流程执行:从上到下,从左到右
2.选择执行:分支选择
3.循环执行:重复执行
3.7.1选择
单选择
if (条件){
语句体;
}
首先执行条件
如果结果为true,则执行语句体;
如果结果为false,则结束if语句。
注意:若语句体只有一条语句,可以省略大括号,但不建议省略
双选择
if (条件){
语句体1;
}else {
语句体2 ;
}
首先执行条件
如果结果为true,则执行语句体1;
如果结果为false,则执行语句体2。
多选择
if(比较表达式1) {
语句体1 ;
} else if (比较表达式2){
语句体2;
} else if (比较表达式3){
语句体3;
}
.....
[else {
语句体n+1 ;
}]
Switch结构
多个if .. else且值为定值时(即=== 在比较运行结果时,采用的是严格相等运算符(===) ,而不是相等运算符(==) ,这意味着比较时不会发生类型转换。),可以使用switch替换:
switch(表达式) {
case值1 :
语句体1 ;
break;
case值2 :
语句体2;
break;
.....
default:
语句体n+1 ;
[break;]
}
注意:break防止穿透,如果没有break,则继续执行后面的代码,直到遇到break或全部执行完毕,但是有些时候会利用穿透。
3.7.2循环
循环结构用于重复执行某个操作简单理解就是重复执行同类型的代码,它有多种形式。
while
先判断后执行
基本格式
while(判断条件语句) {
循环体语句;
}
扩展格式:
初始化语句:
while(判断条件语句) {
循环体语句;
控制条件语句;// 少了它很容易形成死循环
}
do....while
先判断一次,至少执行一次
基本格式
do {
循环体语句;
}while(判断条件语句):
扩展格式:
初始化语句;
do {
循环体语句;
控制条件语句;
} while( 判断条件语句) ;
for
for (初始化语句;判断条件语句;控制最件语句){
循环体语句;
}
break与continue
break:停止本层循环
continue:暂停本次循环,继续下一次
3.8数组
数组是按次序排列的一组数据,每个值的位置都有编号(从0开始),整个数组用方括号表示。
3.8.1数组定义
JS中定义数组的三种方式如下(也可先声明再赋值) :
var arr = [值1,值2,值3]; //隐式创建
var arr = new Array(值1,值2,值3); //直接实例化
var arr = new Array(size); //创建数组并指定长度
3.8.2基本操作
数组的长度可以通过length属性来获取,并可以任意更改
数组名. length
数组名.length =新长度
数组中的每一个元素都可以被访问和修改,甚至是不存在的元素,无所谓越界
数组名[下标]
数组名[下标] =新值
3.8.3数组遍历
数组的遍历即依次访问数组的每一个元素 ,JS提供三种遍历数组的方式:
1.for循环历遍
for(var 1=0; i<=数组 . length-1; 1i++){
}
如:
for(var idx=0;idx<arr.length,idx++){
console. log(arr[idx]);
}
2.for...in
for(var下标(名称任意) in数组名){
数组名[下标]是获取元素
} //下标(名称任意)
如:
for(var idx in arr){
console. log(arr[idx]);
}
3.forEach
数组名. forEach( function(element, index) {
// element(名称任意):元素,index(名称任意): 下标
})
如:
arr. forEach( function(elem, idx){
console.1og(idx +“-->” + elem) ;
});
4.了解
数组在使用的时候建议大家规矩来用。在存放数据时,从下标8开始顺序的存放数组元素。
如果下标:
1.为非负整数(包括整数字符串):自动从e开始,不存在添加undefined
2.为负数、小数、非数字符串:这些内容不计算在长度内,当成’属性”处理,相当于自定义属性。
数组非常灵活,使用数组元素
1.下标:非负整数(包括整收字符串):
数组.下标
数组[下标]
2.下标:负数、小数、非数字字符串:
数组[属性]
★for -->不遍历属性
★foreach -- >不遍历属性和索引中的undefined
* for in -->不遍历索引中的undefined
3.8.4数组提供的操作方法
Array对象为我们提供了-一些方法,可以很方便地操作数组
push 添加元素到最后
unshift 添加元素到最前
pop 删除最后一项
shift 删除第一项
reverse 数组翻转
join 数组转成字符串
index0f 数组元索索引
slice 截取(切片)数组,原数组不发生变化
splice 剪接数组,原数组变化,可以实现前后删除效果
concat 数组合并
3.9函数
函数,即方法。就是一段预先设置的功能代码块,可以反复调用,根据输入参数的不同,返回不同的值。函数也是对象。
3.9.1.函数的定义
有三种函数定义的方式:函数声明语句、函数定义表达式、Function 构造函数
3.9.1.1.函数声明语句
function函数名( [参数列表]){
}
例如:
function foo(){
console. log(1);
}
foo();
该种方式定义的函数具有声明提升的效果
foo();
function foo(){
console.1og(1);
}
//变量声明提升
console.log( a );
vara=2;
3.9.1.2.函数定义表达式
以表达式方式定义的函数,函数的名称是可以不需要的
var变量名= function ([参数列表]) {
}
变量名();
例如:
var fun = function(){
console.log("Hello");
}
fun();
这种写法将一个匿名函数赋值给变量。 这时,这个匿名函数又称函数表达式,因为赋值语句的等号右侧只能放表达式。
3.9.1.3. Function构造函数
Function构造函数接收任意数量的参数,但最后一个参数始终都被看成是函数体,而前面的参数则列举出了新函数的参数。
var add = new Function('x','y','return (x + y)');
//等同于
function add(x, y) {
return (x + y);
}
add();
注意:
JS中的函数没有重载,同名的函数,会被后面的函数覆盖。
JS中允许有不定数目的参数。
3.9.2函数的参数
函数运行的时候,有时需要提供外部数据,不同的外部数据会得到不同的结果,这种外部数据就叫参数,定义时的参数称为形参,调用时的参数称为实参
●实参可以省略,那么对应形参为undefined.
●若函数形参同名(一般不会这么干),在使用时以最后一个值为准。
●可以给参数默认值:当参数为特殊值时,可以赋予默认值。
●参数为值传递,传递副本;引用传递时传递地址,操作的是同-一个对象。
3.9.3函数的调用
函数调用形式是最常见的形式,也是最好理解的形式。所谓函数形式就是一般声明函数后直接调用即是。例如:
// 声明一个函数,并调用
function func() {
alert("Hello World");
}
func();
或者:
// 使用函数的Lambda表达式定义函数,然后调用
var func = function() {
alert("你好,程序员");
};
func();
这两段代码都会在浏览器中弹出一个对话框,显示字符串中的文字,这个就是函数调用。
可以发现函数调用很简单,就是平时学习的一样,这里的关键是,在函数调用模式中,函数里的 this 关键字指全局对象,如果在浏览器中就是 window 对象。例如:
var func = function() {
alert(this);
};
func();
此时,会弹出对话框,打印出 [object Window]。
方法调用模式
函数调用模式很简单,是最基本的调用方式。但是同样的是函数,将其赋值给一个对象的成员以后,就不一样了。将函数赋值给对象的成员后,那么这个就不在称为函数,而应该叫做方法。
构造器调用模式
同样是函数,在单纯的函数模式下,this 表示 window;在对象方法模式下,this 指的是当前对象。除了这两种情况,JavaScript 中函数还可以是构造器。将函数作为构造器来使用的语法就是在函数调用前面加上一个 new 关键字。
3.9.4 return
函数的执行可能会有返回值,需要使用returm语句将结果返回。return 语句不是必需的,如果没有的话,该函数就不返回任何值,或者说返回undefined.
作用:
1.在没有返回值的方法中,用来结束方法。
2.有返回值的方法中,一个是用来结束方法,一个是将值带给调用者.
3.9.5 函数的作用域
函数作用域:全局(global variable)和局部(local variable)
1.全局变量与局部变量同名问题
2.在函数中定义变量时,若没有加var关键字,使用之后自动变为全局变量