JS基础篇02

第五讲 函数

写一个获取非行间样式的函数

/**
 *获取非行内样式
 *
 * @param {element} ele 需要获取样式的元素
 * @param {string} attr 获取的样式属性名
 * @returns
 */
function getCss(ele,attr){
    if(!ele.currentStyle){
        return getComputedStyle(ele)[attr];
    }else{
        return ele.currentStyle[attr];
    }
}

 

说说你对作用域链的理解?

函数执行时会产生私有作用域,函数内部的函数执行又会产生一个子级作用域,这样一级一级形成作用域链的关系。函数内部使用变量时,先从当前作用域查找,如果没有,就逐级向上级作用域查找,一直找到全局作用域,如果没有就报错。

 

var x=1,y=z=0;
function add(n){n=n+1};y=add(x);
function add(x){n=n+2};z=add(x);
console.log(x,y,z);

1 undefined undefined

函数重名,最后变量都会覆盖函数,并且函数内部并没有返回值

 

请解释变量提提升(预解析)?

js代码运行之前,会先进行预解析

找到var的变量提前声明,先不赋值;找到function,声明并且赋值

函数内部预解析:①先进行函数作用域内部的预解析(var ,形参 ,function) ②形参赋值  ③从上往下执行代码

 

函数声明和函数表达式声明的区别?

函数声明预解析,声明并赋值,可以在创建之前调用

表达式声明,只声明变量不会赋值,不能在创建之前调用

 

Javascript两种变量范围有什么不同?

全局变量:直接声明在全局作用域的变量,在任何地方都能访问

私有变量:在函数内部声明的变量,私有变量在函数以外不能访问,函数的形参也是私有变量

 

 

第六讲  定时器与函数封装

定时器的分类?他们的区别及用法是什么?

//等待一段时间,执行一段代码,只执行一次
setTimeout(function(){},间隔时间)
//每隔一段时间执行一个函数,反复运行
setInterval(function(){},间隔时间)

 

 

第七讲 时间对象&字符串对象

js有哪些内置对象?

String 字符串对象Array 数组Boolean 布尔对象
Number 数值对象Object 基础对象Arguments 函数参数集合
Error 异常对象Function 函数构造器Math 数学对象
RegExp 正则表达式对象  

 

 

把下面的字符串去重,并去掉特殊字符按照数字在前字母在后的顺序排序字符串,如下:‘1233fddfd&3434fdsa&454545&4545444rfdsfd&545gdsgs’

var str = '1233fddfd&3434fdsaff&454545&4545444rfdsfds&545gdsgs';
var str1 = str.split('&').join('');
var obj = {};
for(var i=0;i<str1.length;i++){
    obj[str1[i]] = str1[i];
}
var ary1 = [];
for(var key in obj){
    ary1.push(key);
}
        
console.log(ary1.join(''))

 

截取字符串‘abcdefg’中的def。

var str = 'abcdefg';
str = str.substring(3,6);
console.log(str);

 

有这样一个url:http://item.taobao.com/item?a=1&b=2&c=&d=xxx&e,请写一段js程序提取url中各个get参数(参数名和参数个数不确定),将其key-value形式返回到一个json结构中,如{a:'1',b:'2',c:'',d:'xxx',e:undefined}

var str1 = 'url:http://item.taobao.com/item?a=1&b=2&c=&d=xxx&e';

function format(str){
    var obj = {};
    str = str.substring(str.indexOf('?')+1);
    str = str.split('&');
    for(var i=0;i<str.length;i++){
        var ary = str[i].split('=');
        obj[ary[0]] = ary[1];
    }

    return obj;
}
    console.log(format(str1));

 

判断一个字符串中出现次数最多的字符,并且统计次数。

/**
 *判断一个字符串中出现次数最多的字符,并且统计次数
 *
 * @param {string} str 自定义字符串
 * @returns ary 数组中返回次数最多的字符
 */
function numString(str){
    // 取出字符串中每一个字符,作为对象的属性,如果第一次添加,值设为1;若已存在值+1
    var obj = {};
    for(var i=0;i<str.length;i++){
        if(obj[str[i]]){
            obj[str[i]] += 1;
        }else{
            obj[str[i]] = 1;
        }   
    }

    // 判断次数出现最多的属性
    var max = 0;
    for(var key in obj){
        if(obj[key]>max){
            max = obj[key];
        }
    }
    console.log(max);


    //将出现最多的添加到数组中,并在数组中输出
    var ary = [];
    for(var key in obj){
        if(obj[key] == max){
            ary.push(key);
            // console.log(key+'出现次数最多,出现'+max+'次');
        }
    }
    return ary,max;
} 

 

第八讲 数组&Math

数组方法pop()  push()  unshift()  shift()?

 pop() push()unshift() shift()
功能在数组末尾删除一项在数组末尾添加项在数组的开头添加项在数组的开头删除项
参数不需要添加到数组的项,多项逗号隔开添加到数组的项,多项逗号隔开不需要
返回值删除的项数组的新长度数组的新长度删除的项
原数组是否改变改变改变改变改变

 

split()  join()的区别?

(1)split()用于分割字符串,返回一个数组

split()只有一个参数时:分割的字符串或正则表达式;两个参数时,第二个参数是指返回的数组中元素的个数;

(2)join()把数组的每一项以指定的连接符连成字符串,返回值为一个字符串;

参数是连接符,默认是逗号,空字符串表示没有连接符

 

编写一个数组去重的方法。

//数组去重
//方法一,利用对象
/* var obj = {};
for(var i=0;i<arr.length;i++){
    obj[arr[i]] = arr[i];
}
var arr1=[];
for(var key in obj){
    arr1.push(key);
} */


//方法二,双循环
for(var i=0;i<arr.length;i++){
    for(var j=i+1;j<arr.length;j++){
        if(arr[i] == arr[j]){
            arr.splice(j,1);
            j--;
        }
    }
}
console.log(arr); 

 

['1','2','3'].map(parseInt)答案是多少?

[1,2,3].map(parseInt)返回[1,NaN,NaN]

 

冒泡算法排序?

//冒泡算法  数组排序
var arr=[3,4,1,1,1,6,7,1,0,1,3,11,2,4,2,4];
for(var i=0;i<arr.length-1;i++){
    for(var j=0;j<arr.length-1-i;j++){
        if(arr[j]>arr[j+1]){
            var temp = arr[j];
            arr[j]=arr[j+1];
            arr[j+1] = temp;
        }
    }
}

//选择排序
/* for(var i=0;i<arr.length;i++){
        for(var j=i+1;j<arr.length;j++){
            if(arr[i]>arr[j]){
                var temp = arr[i];
                arr[i] = arr[j];
                arr[j] = temp;
            }
    }
}
console.log(arr); */

 

 

第九讲 DOM

DOM怎么添加、移除、移动、复制、创建和查找节点

①创建:document.creatElement('li')

②添加:parentNode.appendChild(childNode)

③在指定元素之前插入节点:refNode.parentNode.insertBefore(newNode,refNode)

④替换:oldNode.parentNode.replaceChild(newNode,oldNode)

⑤移除,删除:

delNode.parentNode.removeChild(delNode)

delNode.remove();//不兼容

查找:

getElementsByTagName()    //通过标签名称

getElementsByName()    //通过元素的Name属性的值

getElementById()    //通过元素Id,唯一性

⑦复制:

Node.cloneNode() //浅克隆,只复制标签本身

Node.cloneNode(true) //深克隆,复制标签本身以及所有后代

appendChild()、insertBefore()、replaceChild()这三个方法如果操作的是页面上已经存在的节点,那么就是进行位置的移动。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值