Day03 循环
-
for
-
双重for
-
while
-
do while
-
continue break
for循环执行不相同代码
有计数器变量i的存在
for(var i = 1;i < 100;i++) {
console.log(‘这个人今年’ + i +‘岁了’);
}
prompt取过来的数据是字符串型的,需要转换为数字型才能正常使用。
异或是半加运算
一个数据异或另一个数据两次,最后得到的结果还是这个数据,用公式表示就是
a ^ b ^ b=a。
while循环比for更灵活
案例:
var message = prompt('do you love me?');
while (message !== 'i love you') {
message = prompt('do you love me?');
}
alert('i love you too honey!');
continue
跳出本次循环,继续下一次循环
Day04 数组
创建数组 两个方法
1.new
var 数组名 = new Array();
var arr = new Array();
2.利用数字字面量创建
var arrayname = [];
数组里面的数据用逗号分隔
var array = [1,2,‘kafuka 老师’,true];
索引号从0开始。
输出整个数组: console.log(arry1);
数组遍历:for var k in循环 或者单纯的for 循环
数组长度:arr.length,动态的,可以随着数组元素数量变化而变化
不要直接给数组名字赋值,不然覆盖数组原有全部元素。
var newArry = [];
for (var i = 0;i < 10;i++){
newArry[newArry.length] = i;
}
数组转化为字符串
var arytest = ['red','green','blue','pink'];
var strtest = '';
//设置一个空字符串使用隐式转换
var sep = '';
for (var i = 0; i < arytest.length;i++){
strtest += arytest[i] + sep;
}
console.log(strtest);
//运行结果: "redgreenbluepink"
冒泡排序
原理:冒泡排序比较相邻两个元素大小,比N轮,每比一轮就可以把这一轮中最大的数字排在此轮最后面。是一种稳定排序算法。
冒泡排序算法的原理如下:
- 比较相邻的元素。如果第一个比第二个大,就交换他们两个。
- 重复以上步骤,从开始第一对到结尾的最后一对。结束后,最后的元素是这一组数字中最大的数。
- 除了最后一个元素,重复以上的步骤。
- 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
c语言版:
#include <stdio.h>
#define ARR_LEN 255 /*数组长度上限*/
#define elemType int /*元素类型*/
/* 冒泡排序 */
/* 1. 从当前元素起,向后依次比较每一对相邻元素,若逆序则交换 */
/* 2. 对所有元素均重复以上步骤,直至最后一个元素 */
/* elemType arr[]: 排序目标数组; int len: 元素个数 */
void bubbleSort (elemType arr[], int len) {
elemType temp;
int i, j;
for (i=0; i<len-1; i++)
/* 外循环为排序趟数,len个数进行len-1趟 */
for (j=0; j<len-1-i; j++) {
/* 内循环为每趟比较的次数,第i趟比较len-i次 */
if (arr[j] > arr[j+1]) {
/* 相邻元素比较,若逆序则交换(升序为左大于右,降序反之) */
/*如果不是逆序,则不交换,保持原状,
下一个对比的数字就不再是本轮循环中的起始的那个数字*/
temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
int main (void) {
elemType arr[ARR_LEN] = {3,5,1,-7,4,9,-6,8,10,4};
int len = 10;
int i;
bubbleSort (arr, len);
for (i=0; i<len; i++)
printf ("%d\t", arr[i]);
putchar ('\n');
return 0;
}
JS:
function bubbleSort(arr) {
var i = arr.length, j;//i为数字长度,j为数组下标
var tempExchangVal;//中转数字
while (i > 0) {
for (j = 0; j < i - 1; j++) {
if (arr[j] > arr[j + 1]) {
tempExchangVal = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = tempExchangVal;
}
}
i--;//重复n轮 n = i-1
}
return arr;
}
var arr = [3, 2, 4, 9, 1, 5, 7, 6, 8];
var arrSorted = bubbleSort(arr);
console.log(arrSorted);
alert(arrSorted);
Day05 函数
形参实参数量不一致
1实参多,那么形参能接受几个就是几个,多余的扔掉
2实参少,形参可以看作是不用声明的变量,默认为undefined。
任何数字加上undefined 都是NaN。输出结果不可预计,需要尽可能匹配。
return总结
return后面的函数不会被执行。
return 只能返回一个值。返回return后面的最后一个值。
如果要同时输出多个结果,把多个结果放在一个数组里面,输出这个数组。数组会被看作一个结果。
如果函数没有return,则返回undefined。
return:1 .退出循环;2 .终止当前函数体内的代码,后面的都不执行;3 .返回return中的数值。
arguments
不确定有多少参数传递的时候,用arguments来获取。
伪数组
有长度
有索引
没有真正数组的一些方法,如pop();,push();
只有函数才有arguments对象,且已经内置好了。
例:
function getMax(){
var max = arguments[0];
for (var i = 1;i < arguments.length;i++){
if (max < arguments[i]){
max = arguments[i];
}
}
return max;
}
console.log(getMax(11,11,234,6346));
console.log(getMax(9,11,23238954,6343425356));
console.log(getMax(3458395,11,2334,67364655,2359,38));
利用函数判断闰年
闰年条件:4年一闰,百年不闰,四百年再闰。
function isLeapYear(year) {
var flag = false;
if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) {
flag = true;
}
return flag;
}
if (isLeapYear(2000)){
console.log('is leap year!');
}else {
console.log('is not.');
}
函数声明方式
1 函数关键字自定义函数(命名函数)
function fn () {
}
fn();
2.函数表达式(匿名函数)
函数没有名字
var fun = function(aru) {
console.log(aru);
}
这里的fun是一个变量的名字,并不是函数的名字,
但是这个变量的名字可以传递参数
如:fun(123);