面试准备(1)
编写一个JavaScript函数,输入指定类型的选择器(仅需支持id,class,tagName三种简单CSS选择器,无需兼容组合选择器)可以返回匹配的DOM节点
function getStyle(str){
var s = str.charAt(0);
var ss = str.substr(1);
switch(s){
case '#':
return document.getElementById(ss);
break;
case '.':
if(document.getElementsByClassName)
{
return document.getElementsByClassName(ss);
break;
}
else
{
var arr = [];
var dom = document.getElementsByTagName('*');
for(var i = 0; i < dom.length; i++)
{
var classArr = dom.className.split(" ");
for(var j = 0; j < classArr.length; j++ )
{
if(classArr[j] == ss)
{
arr.push(dom[i]);
break;
}
}
}
return arr;
}
default:
return document.getElementsByTagName(str);
}
}
克隆一个对象
function clone(obj){
var buf;
// 数组
if(obj instanceof Array){
buf = [];
for(var i = 0; i < obj.length; i++)
{
buf[i] = clone(obj[i]);
}
}
//对象
else if(obj instanceof Object){
buf = {};
for(var k in obj)
{
buf[k] = clone(obj[k]);
}
}
// 普通变量直接赋值
else{
buf = obj;
}
return buf;
}
小数精确度 0.1+0.2
function add(num1,num2){
let r1,r2,m;
r1 = (num1+'').split('.')[1].length;
r2 = (num2+'').split('.')[1].length;
m = Math.pow(10,Math.max(r1,r2));
return (num1 * m + num2 * m) / m;
}
数组排序
function sort(arr){
var sortArr = arr.sort(function(a,b){
return a - b;
})
//倒排
var sortArr = arr.sort(function(a,b){
return b - a;
})
}
生成[x,y]范围的随机整数
Math.random()产生随机数的范围从0-1;
function Random(min,max){
return Math.random()*(max-min)+min;
}
parseInt parseFloat
- parseFloat() 所解析的字符串中第一个小数点是有效的,而parseInt() 遇到小数点会停止解析,因为小数点并不是有效的数字字符。
- parseFloat() 始终会忽略前导的零,十六进制格式的字符串始终会被转换成0,而parseInt() 第二个参数可以设置基数,按照这个基数的进制来转换
- 如果第一个字符不是数字或者负号,parseInt() /parseFloat()就会返回NaN,同样的,用parseInt() 转换空字符串也会返回NaN。如果parseInt的是16进制则不会。
立即执行函数(IIFE)
(function(win){
var itcast = {
getEle:function(){
console.log("沙箱模式")
}
}
//如果需要在外界暴露一些属性或者方法,就可以将这些属性和方法
//加到window全局对象上去
//但是这window全局对象不可以直接引用,因为直接引用会破坏沙箱原则
//所以我们选择使用传参的形式将 window对象 传入沙箱内
//此时沙箱内使用window对象的时候,不会再去全局搜索window对象
//而使用的就是沙箱内部定义的形参
win.itcast = win.$ = itcast;
})(window);
关键字
- with 将代码的作用域设置到一个特定的作用域中
- void 返回值为空
- class
- parent