if语句
语法结构
if (条件表达式) {
//条件成立执行语句
}
三元表达式(简化的if语句)
条件表达式 ? 表达式1 : 表达式2
//如果表达式为真返回1的值,为假返回2
var num = prompt("请输入数据");
var result = num < 10 ? "0" + num : num; //小于10在数字前加0,否则原数字输出
alert("返回数字为" + result);
//switch()内的值与case内的值是全等(===),必须是值和数据类型一致才可以
//断点调试
F12—sources—文件----某一行设置断点
watch 监视,用于监视变量的值的变化
F11:单步执行
for循环
例7(打印n行n列的星星(倒着))
var n = prompt("请输入数字n");
var str = "";
for (i = n; i > 0; i--) {
for (j = 0; j < i; j++) {
str += "★";
}
str += "\n";
}
console.log(str);
//打印九九乘法表
var str = "";
for (i = 1; i <= 9; i++) {
for (j = 1; j <= i; j++) {
str += j + "x" + i + "=" + i * j + "\t";
}
str += "\n";
}
console.log(str);
数组
var arr = new Array(); //创建一个新的空数组 用New创建数组
//利用数组字面量创建数组[]
var arr = []; //创建一个空的数组
var arr = [1, 2, "pink", true]; //我们数组里面的数据一定用逗号隔开,可以存放任意类型的数据
//获取数组元素
console.log(arr[1]); //输出2
//数组的遍历 for循环
for (var i = 0; i < arr.length; i++) {
console.log(arr[i]);
}
输出规定样式数组元素
var str = "";
var step = "|";
var arr = ["red", "green", "blue", "pink"];
for (var i = 0; i < arr.length; i++) {
str += arr[i] + step; //是+=
}
console.log(str);
增加数组元素
var str = "";
var arr = ["red", "green", "blue", "pink"];
console.log(arr.length);
arr.length = arr.length + 1;
console.log(arr.length);
arr[0]='yellow'; //如果索引号所代表数组位本来已经存在元素,则替换
arr[4]='black'; //如果索引号所代表数组位本来不存在元素,则追加
arr="white"; //数组元素将便为white 不要直接给数组名赋值,否则里面的数组元素都没有了
冒泡排序
//例7 数组排序之冒泡排序
var arr = [5, 6, 7, 0, 1];
for (var i = 0; i <= arr.length - 1; i++) { //外层循环次数
for (var j = 0; j <= arr.length - i - 1; j++) { //内循环,每一趟的交换次数
//内部交换2个变量的值,前一个和后一个数组元素相比较
if (arr[j] > arr[j + 1]) {
var temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
}
}
}
console.log(arr);
函数
函数就是封装了一段可以被重复执行调用的代码块, 目的:让大量代码重复使用
函数=声明函数+调用函数
// 1.声明函数
function 函数名( ){ function 声明函数的关键字
//函数体;
}
// 2.调用函数
函数名( );
- function 声明函数的关键字,全部小写
- 函数是做某件事,函数名一般为动词
- 函数不调用时自己不执行
// 可利用函数的参数实现函数重复不同代码
//function 函数名(形参1,形参2...){
//函数主体
}
函数名(实参1,实参2.....);
- 函数的参数可以有,也可以没有,个数不限
- 如果实参的个数和形参的个数一样,则正常输出结果;
- 如果实参个数小于形参个数,形参可以看作是不用声明的变量 结果就是undefined
- 如果实参个数大于形参个数,会取到形参的个数
函数的返回值
函数是用于做某件事或实现某种功能,内部不应有输出语句,最终的结果需要返回给函数的调用者:函数名();是通过return 实现的
只要函数遇到return ,就把后面的结果返回给函数的调用者 。
函数名()=return后面的结果
function getResult(){
return 666;
}
getResult(); //getResult()=666
console.log(getResult); //输出666
//例二 利用函数求任意两个数最大值
function getMax(num1, num2) {
return num1 > num2 ? num1 : num2;
}
console.log(getMax(5, 6));
- return 是终止函数,return 后面的语句不会被执行
- return 只能返回一个值,如果用逗号隔开,则以最后一个为准,返回的结果是最后一个值,若想返回多个值,则用数组返回
function getResult(num1, num2) {
return [num1 + num2, num1 - num2, num1 * num2, num1 / num2];
}
re = getResult(1, 2); //返回的是一个数组
console.log(re);
- 函数如果有return ,则返回的是return 后面的值,如果函数没有return 则返回undefined
break:结束当前循环体
continue:跳出本次循环,继续执行下次循环
return:不仅可以退出循环,还能够返回return语句中的值,同时还可结束当前函数体的代码
函数的arguments的使用
arguments实际是当前函数的一个内置对象,所有函数都内置了一个arguments对象,arguments对象中存储了传递的所有实参
- arguments的展示形式是一个伪数组;
- 只有函数才有arguments对象 且是每个函数都内置好了这个arguments
- 伪数组并不是真正的数组,但它具有数组的长度属性;
- 是按照索引的方式进行存储的
- 它没有真正数组的一些方法 pop( ), push( ) 等
- 可以按照数组的方式遍历arguments
function fn() {
console.log(arguments); //里面存储了所有传递过来的实参
console.log(arguments.length); //返回结果为3
console.log(arguments[2]); // 返回结果为5
}
fn(1, 4, 5);
函数的相互调用
每个函数都是独立的代码块,用于完成相应功能,可以相互调用
//函数的相互调用之 用户输入年份,输出当前年份2月份的天数
function getDay() {
var year = prompt("请输入年份");
var day = 28;
if (getyear(year)) {
alert(year + "是闰年有29天");
} else {
alert(year + "是平年有28天");
}
}
function getyear(year) {
var flag = false;
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) {
flag = true;
}
return flag;
}
getDay();
函数的两种声明方式
1.命名函数(常用)
function fn() {}
fn();
2.函数表达式(匿名函数)
//var 变量名 = function(){ };
var fun = function (aru) {
console.log("我是函数表达式");
console.log(aru);
};
fun('好的');
- 上述第二种方式中的fun是变量名 ,不是函数名
- 函数表达式声明方式与声明变量差不多,只不过变量里面存的是值,而函数表达式里面存的是函数
- 函数表达式也可以进行传递参数
作用域
作用域即代码名字(变量)在某个范围内起作用和效果,目的是为了提高程序的可靠性,更重要的是减少命名冲突
es6标准
- 全局变量:整个script标签,或者是一个单独的js文件,在代码的任何部位都能使用(如果在函数内部没有声明直接赋值的变量也属于全局变量)
- 局部变量:(函数作用域),只在函数内部起作用
全局变量只有浏览器关闭的时候才会销毁,比较占内存资源,局部变量当程序执行完毕就会销毁,比较节约内存资源。
js没有块级作用域,js是在es6时新增的块级作用域
块级作用域: { } if{ } for{ }
作用域链
- 只要是代码,就至少有一个作用域
- 写在函数内部的局部作用域
- 如果函数中还有函数,那么在这个作用域中就又可以诞生一个作用域
- 根据内部函数可以访问外部函数的这种机制,用链式查找决定哪些数据能被内部函数访问,就称为作用域链。
- 就近原则,站在目标出发,一层一层向外查找,最近的值。