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
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
也可以将代码简化为:
`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() 返回数组对象的原始值