这几天学习了下JS的基础语法,具体的学习文章参考以下链接:
W3School的JS部分
JavaScript 标准参考教程(alpha)
基础语法在这里我就不赘述了,我来写写我做这些案例遇到的一些问题吧。
1.补全下面的函数
// 对 a 和 b 做加法
function add(a, b) {
// 你写的内容
}
add(1, 2) // 返回值 3
add(1, -2) // 返回值 -1
//解法
function add(a,b){
return a+b;
}
alert(add(1,2));
2.补全下面的函数
function shouldWork(date) {
// 你写的内容。分别实现用 if 和 switch 实现。
}
shouldWork('周一') // 返回值是 上班
shouldWork('周二') // 返回值是 上班
shouldWork('周三') // 返回值是 上班
shouldWork('周四') // 返回值是 上班
shouldWork('周五') // 返回值是 上班
shouldWork('周六') // 返回值是 上班
shouldWork('周日') // 返回值是 上班
刚看见分别用if和switch去实现,好尴尬。。我用的是for循环加if语句判断
//解法
var arr=["周一","周二","周三","周四","周五"]; //把数据存放在一个数组里
function shouldwork(date) {
for(i=0;i<5;i++){
if(date==arr[i]){ //判断数据是否在数组中存在
alert("上班");
}
}
}
shouldwork("周三");
3.补全下面的函数
// 对 传入的所以参数求和
function superAdd() {
// 你写的内容
}
superAdd(1) // 返回值 1
superAdd(1, 2) // 返回值 3
superAdd(1, 2, 3, 4) // 返回值 10
superAdd(1, 2, 3, 4, 5) // 返回值 15
上题函数是没有形参的,所以我们不确定实参的个数,那我们怎么获取实参呢。这里的话我查阅了下资料,发现需要了解JS的arguments对象,相当于所有的实参都存储在这个对象中,并且通过arguments.length能获取实参的长度。
arguments知识点
//解法
function superAdd(){
var sum=0;
for(var i=0;i
4.补全下面的函数
// 日期格式化
function formateDate(date) {
// 你写的内容
}
formateDate(new Date('2016/4/6')) // 返回值 2016年4月6日是星期四
这里需要的是返回的年月日时以字符串的形式呈现的,这里需要的是Data类型的getFullYear()方法,getMonth()方法,getDate()方法和getDay()方法,这几个方法都是直接取得和设置日期的部分方法。但是在我第一次使用这几个方法时,出现了问题。代码片如下:
function formateDate(date) {
var year=date.getFullYear();
console.log(year);
var month=date.getMonth()+1;
console.log(month);
var date=date.getDate();
console.log(date);
var day=date.getDay()+1;
console.log(year+"年"+month+"月"+date+"日是星期"+day);
}
formateDate(new Date('2016/4/6'));
浏览器显示的结果如图:
为什么会出现这种情况呢?我检查了下,发现是局部变量名date跟函数形参名冲突了,导致后面调用getDay()方法报错,解决办法就是修改下局部变量名。
function formateDate(date) {
var year=date.getFullYear();
console.log(year);
var month=date.getMonth()+1;
console.log(month);
var date_1=date.getDate();
console.log(date_1);
var day=date.getDay()+1;
console.log(year+"年"+month+"月"+date_1+"日是星期"+day);
}
formateDate(new Date('2016/4/6'));
5.编写函数反转字符串
//编写reverse,满足如下条件
reverse('abcd'); // 输出 'dbca'
reverse('a'); // 输出 'a'
这道题我使用了两种解法:第一种需要用到JS中的三种方法,能让字符串反向显示。
- String.prototype.split()
- Array.prototype.reverse()
- Array.prototype.join()
简单说一下: - split()方法将一个字符串对象的每个字符拆出来,并且将每个字符串当成数组的每个元素
- reverse()方法用来改变数组,将数组中的元素倒个序排列,第一个数组元素成为最后一个,最后一个变成第一个
- join()方法将数组中的所有元素边接成一个字符串
function reverseString(str) {
var splitString=str.split("");//将字符串拆分
var reverseArray=splitString.reverse();//使用reverse()方法将字符串倒序组成一个新的字符数组
var joinArray=reverseArray.join("")//使用join()方法将数组拼接成一个字符串
return joinArray;
}
alert(reverseString("abcde"));
第二种方法:我使用的是for循环倒序遍历字符串然后存储在一个空的字符串中。但是在编码过程中还是出现了问题。
感觉很懵逼,仔细一看发现,我忽略了str[i]中的i代表的是字符串中的第i+1个字符,例如str[5]代表的是abcdef中的f,因为我上图代码遍历的是从str[6]开始的,但这个字符串不存在第七个字符,所以给出了特殊值undedined,又因为结束遍历的i值为1,所以字符a并没有被拼接。修改后的代码:
function reverseString(str) {
var newString=("");//用来接收最后倒序拼接的字符串
for(var i=str.length-1;i>=0;i--){
newString+=str[i];
}
return newString;
}
alert(reverseString("abcdef"));
6.统计字符串中各字符在字符串中出现的数量
//编写caculateExistNum函数,满足如下条件
caculateExistNum('abcd'); // 输出 {a:1,b:1,c:1,d:1}
caculateExistNum('aaabbc00'); // 输出 {a:3,b:2,c:1,o:1}
caculateExistNum(''); // 输出 {}
function fn(str) {
var arr=str.split("");//将字符串拆分存储在数组中
//alert(arr);
var json={};//定义一个空的对象字面量
for(var i=0;i
一开始我使用的alert()输出方式,但浏览器上显示不出结果,所以改为控制台输出结果就好了。
7.查找数组对象中 age 大于 18 对象
// 编写filterAdult函数,满足如下条件
filterAdult([
{age: 19, name:'Jack'},
{age: 5, name:'Apple'},
{age: 12, name:'Lynn'},
{age: 25, name:'David'}
]);
// 输出
[
{age: 19, name:'Jack'},
{age: 25, name:'David'}
]
这里的思路是创建一个空的数组,然后通过判断age>18,把符合满足条件的属性存储在空数组中,这里需要用到数组中的栈方法,ECMAScript为数组提供了push()方法。
- arrayObject.push(newelement1,newelement2,....,newelementX)
- push()方法可以接收任意数量的参数,把他们逐个添加到数组末尾。
function filterAdult(array) {
var newArray=[];
for(var i=0;i18){
newArray.push(array[i]); //把符合条件的推入到空数组中
}
}
console.log(newArray);
}
filterAdult([
{age: 19, name:'Jack'},
{age: 5, name:'Apple'},
{age: 12, name:'Lynn'},
{age: 25, name:'David'}
]);
8.将数组元素去重,其中数组元素均为基本类性
//编写uniq函数,满足如下条件
uniq([1,2,2,3,4,4,4,4]); // 输出 [1,2,3,4]
uniq([1,2,'M','e','r', 'r', 'y']); // 输出 [1,2,'M','e','r','y']
function uniq(array){
var newArr = [];
for(var i=0;i
综上,我发现我的基础语法掌握的还是不够牢固,对于一些细节上的知识掌握还不够仔细,所以需要多总结,多练习。
文中若有错误的地方请大家指出,谢谢!
PS:推荐一波干货十足的前端微信公众号