1、查找两个节点的最近的一个共同父节点,可以包括节点自身

function commonParentNode(oNode1, oNode2) {
if(oNode1.contains(oNode2)){
return oNode1;
}else{
return commonParentNode(oNode1.parentNode, oNode2)
} }
//取任意一个结果开始都ok

2、获取 url 中的参数

    1. 指定参数名称,返回该参数的值 或者 空字符串
    1. 不指定参数名称,返回全部的参数对象 或者 {}
    1. 如果存在多个同名参数,则返回数组
function getUrlParam(sUrl, sKey) {
var arr={};
sUrl.replace(/\??(\w+)=(\w+)&?/g,function(match,p1,p2){
//console.log(match,p1,p2);
if(!arr[p1]){
arr[p1] = p2;
}else{
var p =arr[p1];
arr[p1]=[].concat(p,p2);
}
})
if(!sKey){
return arr;
}else{
return arr[sKey]?arr[sKey]:'';
}
}

3、修改 this 指向 封装函数 f,使 f 的 this 指向指定的对象

function bindThis(f, oTarget) {
    return function(){
        return f.apply(oTarget,arguments);
    }
}

为什么有匿名函数,是因为apply call 是绑定之后是立即调用的,所以需要匿名函数包装且需要传入原函数的参数argumengts. bind 会创建一个新函数,即函数副本

4、根据包名,在指定空间中创建对象

输入描述:

namespace({a: {test: 1, b: 2}}, 'a.b.c.d')

输出描述:

{a: {test: 1, b: {c: {d: {}}}}}


function namespace(oNamespace, sPackage) {
var pN = sPackage.split('.');
var result = oNamespace;
while(pN.length>0){
if(oNamespace[pN[0]]){
if(Object.prototype.toString.call(oNamespace[pN[0]])!=='[object Object]'){
oNamespace[pN[0]]={};
}
}else{
oNamespace[pN[0]]={};
}
oNamespace = oNamespace[pN[0]];
pN.shift();
}
return result;
}

5、如果第二个参数 bUnicode255For1 === true,则所有字符长度为 1

否则如果字符 Unicode 编码 > 255 则长度为 2

function strLength(s, bUnicode255For1) {
var len = s.length;
if (bUnicode255For1){
return len;
}else{
for(var i = 0; i < s.length; i++){
if(s.charCodeAt(i)>255){
len++
}
}
return len;
}
}

6、统计字符串中每个字符的出现频率,返回一个 Object,key 为统计字符,value 为出现频率

  • 不限制 key 的顺序
  • 输入的字符串参数不会为空
  • 忽略空白字符
function count(str) {
var obj = {};
str.replace(/[\S]/g,function(match){
obj[match]= ++obj[match]||1;
})
return obj;
}

7、用 JavaScript 实现斐波那契数列函数,返回第n个斐波那契数。 f(1) = 1, f(2) = 1 等

function fibonacci(n) {

    if(n==1||n==2){
return 1;
}
return fibonacci(n-1)+fibonacci(n-2);
}

**8、为数组添加一个滤除重复项的方法 **

keys: indexof(NAN)每次返回的都是-1

//方法一: 利用filter函数的 先判断是否是Nan
Array.prototype.uniq = function () {
return this.filter(function(item,index){
return item!=item?this.flag= this.flag==undefined:this.indexOf(item)==index
},this)
} //方法二: 循环判断是否是Nan
Array.prototype.uniq = function () {
var result=[];
var flag = true;
for(var i=0;i<this.length;i++){
if(result.indexOf(this[i])===-1){
if(this[i]!=this[i]){
if(flag){
result.push(this[i]);
flag=false
}
}else{
result.push(this[i]);
} }
}
return result;
}
 

9、css 中经常有类似 background-image 这种通过 - 连接的字符,通过 javascript 设置样式的时候需要将这种样式转换成 backgroundImage 驼峰格式,请完成此转换功能

  • 以 - 为分隔符,将第二个起的非空单词首字母转为大写
  • -webkit-border-image 转换后的结果为 webkitBorderImage
function cssStyle2DomStyle(sName) {
var arr = [];
sName.replace(/(-)?(\w+)/g,function(match,p1,p2){
if(arr.length>=1){
var pUpper = p2[0].toUpperCase() + p2.substring(1);
arr.push(pUpper)
}else{
arr.push(p2);
}
})
return arr.join(''); }

10、按所给的时间格式输出指定的时间

格式说明

对于 2014.09.05 13:14:20

yyyy: 年份,2014

yy: 年份,14

MM: 月份,补满两位,09

M: 月份, 9

dd: 日期,补满两位,05

d: 日期, 5

HH: 24制小时,补满两位,13

H: 24制小时,13

hh: 12制小时,补满两位,01

h: 12制小时,1

mm: 分钟,补满两位,14

m: 分钟,14

ss: 秒,补满两位,20

s: 秒,20

w: 星期,为 ['日', '一', '二', '三', '四', '五', '六'] 中的某一个,本 demo 结果为 五

function formatDate(dateObj, format){
var obj = {
yyyy: dateObj.getFullYear(),
yy: (''+dateObj.getFullYear()).slice(-2),
MM: ('0'+(dateObj.getMonth()+1)).slice(-2),
M: dateObj.getMonth()+1,
dd: ('0'+dateObj.getDate()).slice(-2),
d: dateObj.getDate(),
HH: ('0'+dateObj.getHours()).slice(-2),
H: dateObj.getHours(),
hh: ('0'+(dateObj.getHours()%12)).slice(-2),
h: dateObj.getHours()%12,
mm: ('0'+dateObj.getMinutes()).slice(-2),
m: dateObj.getMinutes(),
ss: ('0'+dateObj.getSeconds()).slice(-2),
s: dateObj.getSeconds(),
w: ['日', '一', '二', '三', '四', '五', '六'][dateObj.getDay()]
}
var newDate = format.replace(/([\w]+)/g,function(match,p1){
console.log(p1,obj[p1]);
return obj[p1];
}) return newDate; }

11、判断输入是否是正确的邮箱格式

function isAvailableEmail(sEmail) {
var reg=/^([\w+\.\-]+)@\w+([.]\w+)+$/;
return reg.test(sEmail)
} function isAvailableEmail(sEmail) {
var reg = /^[\w\.]+@[\w]+(\.[\w]{2,4})+$/;
return reg.test(sEmail);
}

12、将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff

  • rgb 中每个 , 后面的空格数量不固定
  • 十六进制表达式使用六位小写字母
  • 如果输入不符合 rgb 格式,返回原始输入
function rgb2hex(sRGB) {
return sRGB.replace(/^rgb\((\d+),\s*(\d+),\s*(\d+)\)$/,function($0,$1,$2,$3){
console.log($0,$1,$2,$3)
return '#'+toHex($1)+toHex($2)+toHex($3);
});
function toHex(num){
return ('0'+(+num).toString(16)).slice(-2) } }

面试常考的js题目(三)的更多相关文章

  1. 面试常考的js题目(一)

    1.找出dom文档中某个元素下面的所有文字(面试写的一塌糊涂,回来重写的) 1.返回回数组形式的 function getText(ele) { if (ele.nodeType === 3) { r ...

  2. 面试常考的js题目(二)

    1. 已知 fn 为一个预定义函数,实现函数 curryIt,调用之后满足如下条件: 返回一个函数 a,a 的 length 属性值为 1(即显式声明 a 接收一个参数) 调用 a 之后,返回一个函数 ...

  3. 前端面试常考知识点---CSS

    前端面试常考知识点---js 1.CSS3的新特性有哪些 点我查看 CSS3选择器 . CSS3边框与圆角 CSS3圆角border-radius:属性值由两个参数值构成: value1 / valu ...

  4. PHP面试常考之会话控制

    你好,是我琉忆,欢迎您来到PHP面试专栏.本周(2019.2-25至3-1)的一三五更新的文章如下: 周一:PHP面试常考之会话控制周三:PHP面试常考之网络协议周五:PHP面试常考题之会话控制和网络 ...

  5. PHP面试常考内容之Memcache和Redis(2)

    你好,是我琉忆.继周一(2019.2-18)发布的"PHP面试常考内容之Memcache和Redis(1)"后,这是第二篇,感谢你的支持和阅读.本周(2019.2-18至2-22) ...

  6. PHP面试常考内容之Memcache和Redis(1)

    你好,是我琉忆.继上周(2019.2-11至2-15)发布的"PHP面试常考内容之面向对象"专题后,发布的第二个专题,感谢你的阅读.本周(2019.2-18至2-22)的文章内容点 ...

  7. PHP面试常考内容之面向对象(3)

    PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(2)"发表后,今天更新面向对象的最后一篇(3).需要(1),(2 ...

  8. PHP面试常考内容之面向对象(2)

    PHP面试专栏正式起更,每周一.三.五更新,提供最好最优质的PHP面试内容.继上一篇"PHP面试常考内容之面向对象(1)"发表后,今天更新(2),需要(1)的可以直接点击文字进行跳 ...

  9. PHP面试常考内容之面向对象(1)

    PHP中面向对象常考的知识点有以下几点,我将会从以下几点进行详细介绍说明,帮助你更好的应对PHP面试常考的面向对象相关的知识点和考题. 整个面向对象文章的结构涉及的内容模块有: 一.面向对象与面向过程 ...

随机推荐

  1. vs2017中信号与槽连接

    在vs2012里和在Qt Creator里添加信号和槽不一样,这里把两种环境下怎么添加详细说明一下 1.在vs2012里添加信号和槽 新建一个qt的项目QtDemo 在qtdeom.h里添加槽 pri ...

  2. ios-runtime拦截touch事件,展示用户触摸效果

    [展示效果说明] 对 app 操作录屏时,展示出手指在 app 上的触摸效果可以看到具体点击情况,感觉这样比较直观方便,也不用做视频后期了. 这里简单用 runtime 实现了一个这样的效果,不需要修 ...

  3. webpack publicpath path

    一.publicpath 用绝对路径:如 /assets/ 会在支援路径前 加上 /assets/ devServer  publicpath 如果没有设置的话,取 publicpath 所以 一般要 ...

  4. linux下的开源NFC协议栈

    1. 协议栈名称 neardal 2. 源码 https://github.com/connectivity/neardal.git 3. 由谁维护? intel 4. 基于neardal的nfc协议 ...

  5. virtualbox迁移虚拟机

    我用的Ubuntu16.04,下图为装好virtualbox时安装好系统后默认的存储位置. 促使我想迁移的原因是我的/home下因为虚拟机的存储原因导致/home下还剩1.5M可用空间..... 该目 ...

  6. IDEA使用git

    本文转自:http://www.cnblogs.com/java-maowei/p/5950930.html 一.安装git 下载地址:  https://git-scm.com/download/w ...

  7. JAVA与c#中byte取值范围的差异

    C#中分有符号类型的sbyte和无符号类型的byte Console.WriteLine("byte.min:{0},byte.max:{1},{2}byte", byte.Min ...

  8. golang实现生产者消费者模型

    生产者消费者模型分析 操作系统中的经典模型,由若干个消费者和生产者,消费者消耗系统资源,生产者创造系统资源,资源的数量要保持在一个合理范围(小于数量上限,大约0).而消费者和生产者是通过并发或并行方式 ...

  9. Java集合(7):散列与散列码

    散列的价值在于速度.我们使用数组来保存键的信息,这个信息并不是键本身,而是通过键对象生成一个数字(散列码),作为数组下标.由于数组的容量是固定的,而散列容器的大小是可变的,所以不同的键可以产生相同的数 ...

  10. three.js后期之自定义shader通道实现扫光效果

    如果你还不知道如何在three.js中添加后期渲染通道,请先看一下官方的一个最简单的demo : github. 正如demo中所示的那样,我们的扫光效果,也是一个自定义的ShaderPass. 所以 ...