学习笔记2
1、编写一个函数,以一个数字作为参数,把这个数字是否是质数(布尔值)作为函数的返回值。
`function isPrime(number){
if(number === 1){
return false;
}
var result = true;
for(var i = 2;i < number - 1;i++){
if(number % i === 0){
result = false;
break;
}
}
return true;
}
console.log(isPrime(3));`
2、编写一个函数,把年月日分别作为这个函数的3个参数,返回这一天是这一年的第几天
`function getDay(year,month,date){
var rules = [
31,
isPrime(year) ? 29 : 28,
31,
30,
31,
30,
31,
31,
30,
31,
30,
31
];
var result = 0;
for(var i = 0;i <month -1;i++){
result = result + rules[i];
}
result +=date;
return result;
}
function isPrime(year){
if((year % 4===0 && year % 100 !==0) || year % 400 ===0){
return true;
}
return false;
}
console.log(getDay(2016,3,10))`
3、编写一个函数,以一个数字n作为参数,返回1! + 2! + 3! + ... + n!的结果
`function sumOfjiecheng(n){
var result = 0;
for(var i =1;i<=n;i++){
var number = 1;
for(var j =1;j<=i;j++){
number = number * j;
}
result = result + number;
}
return result;
}`
一、作用域
如果函数中没有return语句,系统会自动补上return undefined
在函数内部定义的变量,只能在函数内部使用
`functiong fn(){
console.log('hello');
//return undefined;
}`
这里的return undefined便是系统自动补上的。
在js中,只有函数才会产生作用域,而if,while,for都不会产生作用域
二、作用域链
提升函数:对于使用函数申明方式定义的函数,它的定义时机会被提到当前作用域的开头。
作用域链:当在同级中没有找所定义的变量,便会一级一级地向上找定义的变量。
`var a =10;
function fn(b){
a=30;
function fn1(){
var a = 40;
console.log(a);
}
function fn2(){
a = 50;
console.log(a);
}
fn1();
fn2();
console.log(a);
}
fn(a);
console.log(a);`
所得的结果便是:40,50,50,50
三、变量提升
在申明变量的时候,会把当前变量的时机放到作用域的开头,只有变量的申明才有提升,变量的赋值没有提升。
`console.log(a);
var a = 10;`
所得的结果便是undifined;其实它的顺序便是:
`var a;
console.log(a);`
a = 10;
四、对象
用花括号括起来,是无序集合
`var obj={
name:'Bob',
gender:'male'
};
console.log(obj.name);
或者用:
console.log(obj['name']);`
取对象属性的两种方式:点和方括号(推荐优先使用点这种方式)
1、点会把点后面的名称直接作为属性名,而方括号会把方括号里面的返回值作为属性名。
2、对于一些特殊的属性名,比如使用数字开头,或者属性名中间出现了一些符号(+等,就是在命名规范中不合法的一些),这些属性名只能通过方括号来取。
`var arr=[1,2,3]`
这种方式称为自变量数组。
对象和数组的区别例:
`var obj = {
0 : 1,
1 : 2,
2 : 3,
}
console.log(obj)
console.log(obj['length'])`
这个是对象,不会打印出数组的项数,属性的变化需要定义了才会有
array对象方法 构建数组以下三种方式: var arr = [1,2,3]这个是数组字面量,如果没有特殊情况,就是用这个方式,比以下三种方法更简便
一:condytuvyot是处理继承的
`var arr = new Array() 赋值的时候不够直观
arr[0] =1;
arr[1] =2;
arr[2] =3;`
二: var arr = new Array(5)
不存储数据的话,length为5,如果arr[5]的话,打印出来的长度为6
三:var arr = new Array(1,2,3)
五、Array 对象方法
1、concat() 连接两个或更多的数组,并返回结果。
2、join() 把数组的所有元素放入一个字符串。元素通过指定的分隔符进行分隔。
数组join的使用方法
`var arr = [1,2,3,'hello'];
var result = arr.join ();数组每一项都拼接在一起
console.log(arr);
console.log(result);`
3、pop() 删除并返回数组的最后一个元素
数组pop使用方法:把数组的最后一项删掉,会修改数组本身,将删除的一项作为返回值的方法 要是取最后一项的话,用[]取值就可以
`var arr = [1,2,3,'hello'];
var result = arr.pop ();
console.log(arr);
console.log(result);`
4、push() 向数组的末尾添加一个或更多元素,并返回新的长度。
数组pus使用方法:给数组添加一个或多项新项,第一项后的项数可以写也可以不写,会修改数组本身 并且返回新长度,添加新项是添加到末尾的;如果是添加数组的话,把数组作为一项(保留数组),添加到末尾中去,例2
`var arr = [1,2,3,'hello'];
var result = arr.pus ('world');
console.log(arr);
console.log(result);`
例2
var arr = [1,2,3,'hello'];
var arr2 = [nh,nk]
var result = arr.pus ('arr2');
console.log(arr);
console.log(result);
5、reverse() 颠倒数组中元素的顺序。
reverse方法:修改元素组,把数组的从左到右的排序,改成从右到左
6、shift() 删除并返回数组的第一个元素
shift方法:删除数组第一项并将删除的一项作为返回值的方法
7、slice() 从某个已有的数组返回选定的元素(负数的写法只能在slice中使用。)
slice方法,需要填写开始的角标,和结束的角标(结束的角标5不包括在内,不会被选取到)角标可以为负数,只有slice这里可以使用负数,代表从右往左数的对象 截取数组的片段 不会修改数组本身,截取出来的长度比实际的少1 var arr = [1,2,3,'hello',4,5,'js'];
var result = arr.slice ('3,5'); var result = arr.slice ('3,-2');
console.log(arr);
console.log(result);
8、sort() 对数组的元素进行排序(可以传入一个参数,规定它的一个排序规则,可这个参数一定是一个函数),如果不定义比较规则,它是按照首字符的大小进行排序的。
`var arr=[23,1,300,7,4]
//定义排序规则的函数
function rules(a,b){
if(a<b){
//如果要让a出现在b的前面,返回小于0的数
return -1;
}else{
//如果让b出现在a的前面,返回大于0的数
return 1;
}
}
arr.sort(rule);
console.log(arr);`
也可以将代码简化为:
`function rules(a,b){
return a-b;(从小到大排列)
//return b-a;(从大到小排列)
}
arr.sort(rule);
console.log(arr);`
如果让它设为匿名函数的方法:让它从小到大排序:
`arr.sort(function(a,b){return a-b})`
9、splice() 删除元素,并向数组添加新元素。
splice方法:作用一。删除数组中间的某一部分 需要填写两个参数,一个数删除的角标,第二个参数写需要删除几项 var arr = [23,1,300,7,4] var result = arr.splice(2,1) console.log(arr); console.log(result); 这个是删除的项的返回值 作用二。替换的特性,替换数组中的某一部分 var arr = [23,1,300,7,4] var result = arr.splice(2,1,400,500) console.log(arr); console.log(result) 作用三。在数组中某个位置插入新项 var arr = [23,1,300,7,4] var result = arr.splice(3,0,100,200) 3表示在角标为3的位置插入,0表示不删除数组中的项 console.log(arr); console.log(result)
10、toSource() 返回该对象的源代码。
11、toString() 把数组转换为字符串,并返回结果。
12、toLocaleString() 把数组转换为本地数组,并返回结果。
13、unshift() 向数组的开头添加一个或更多元素,并返回新的长度。
14、valueOf() 返回数组对象的原始值