JS基础语法学习及案例练习踩坑笔记

这几天学习了下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'));                              

浏览器显示的结果如图:


JS基础语法学习及案例练习踩坑笔记_第1张图片
例4

为什么会出现这种情况呢?我检查了下,发现是局部变量名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循环倒序遍历字符串然后存储在一个空的字符串中。但是在编码过程中还是出现了问题。

JS基础语法学习及案例练习踩坑笔记_第2张图片
例五
JS基础语法学习及案例练习踩坑笔记_第3张图片
例五

感觉很懵逼,仔细一看发现,我忽略了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:推荐一波干货十足的前端微信公众号

JS基础语法学习及案例练习踩坑笔记_第4张图片
菲麦前端

你可能感兴趣的:(JS基础语法学习及案例练习踩坑笔记)