前端面试题一

1、下面的输出结果是什么?有何不同?why?
var a=10+20+'30';
console.log(a);//3030
var b='10'+20+30;
console.log(b)//102030

从左向右执行,数字和字符串相加,数字会隐式转换为字符串类型

2、实现以下函数
 add(2, 5); // 7
 add(2)(5); // 7  

具体实现:第一个简单,第二个考察的是闭包

function add(a, b) {
    return a + b;
}
add(2, 5);

function add(a) {
    return function(b) {
        return a + b;
    }
}
add(2)(5);
3、写出下面题目的输出结果
var foo = '';
console.log(foo||(foo = "bar"));//"bar"

考察点:赋值语句的返回值就是赋的值

4、下面两个 alert 的结果分别是什么?
var foo = "Hello";
(function() {
    var bar = " World";
    alert(foo + bar); //hello World
})();
alert(foo + bar);//Uncaught ReferenceError: bar is not defined

考察点:作用域

5、 编码:input ‘abcdefg’,output ‘gfedcba’

法一:

var a = 'abcdefg';
var b = a.split('').reverse().join('');
console.log(b);

法二:

var str = 'abcdefg';
Array.prototype.map.call(str, function(x){
    return x;
}).reverse().join();

考察点:
1)split空字符串分割,stringObject 中的每个字符之间都会被分割;
2)reverse() 方法:颠倒数组中元素的顺序,改变原来的数组,而不会创建新的数组;
3)join():可以使用空字符串连接,默认逗号连接。

6、console.log(['1','2','3'].map(parseInt)) 输出值?
[1, NaN, NaN]

考察点:map和parseInt方法
1)map 是ECMAScript 5 的一个内置数值方法,把函数作为它的参数,遍历数组中所有的元素,并且为每个元素调用一次这个传入map中的函数,当前元素作为参数传入该函数。函数调用完毕之后将返回结果存入一个新数组中,不会改变原始数组。不会对空数组进行检测。

函数定义:
arr.map(callback[,thisArg]);

callback函数需要以下3个值:
      currentValue:当前处理数值
      index:处理的数值的索引值
      array:map函数处理的函数值,即arr
thisArg可选. ,callback函数里的this值 默认是window对象
2)parseInt函数定义:parseInt(string, radix)
string: 需要转化的字符,如果不是字符串会被转换,忽视空格符。
radix:数字2-36之间的整型。默认使用10,表示十进制。如果省略该参数或其值为 0,则数字将以 10 为基础来解析。如果它以 “0x” 或 “0X” 开头,将以 16 为基数。如果radix在2-36之外会返回NaN。
那么根据上面的函数定义,这道题目即可转化为求下面这个数组的值:

[parseInt('1', 0),parseInt('2', 1),parseInt('3', 2)]

结果显而易见:[1, NaN, NaN]

7、find和filter的区别

A、find:返回符合测试条件的第一个数组元素索引值,如果没有符合条件的则返回 undefined。对于空数组,函数是不会执行的。没有改变数组的原始值。

array.find(function(currentValue, index, arr)[,thisValue])

callback函数需要以下3个值:
      currentValue:当前处理数值
      index:处理的数值的索引值
      arr:map函数处理的函数值
thisValue:可选
B、filter:创建一个新的数组,新数组中的元素是通过检查指定数组中符合条件的所有元素。如果没有符合条件的元素则返回空数组。不改变数组的原始值。

array.filter(function(currentValue,index,arr)[, thisValue])

参数同find

8、出现下图这种情况的原因以及解决办法
行内div显示错位

html及css代码:


html及css
原因:

1、同一行的行内元素对齐方式默认是底部对齐,即vertical-align:baseline;
2、对于内容为空的inline-block元素而言,该元素的基线就是它的margin底边缘,否则就以元素的内部最后一行内联元素为基线,所以你看黄色的div和cxcx那一排字是对齐的。

解决方式:

1.float方式(考虑脱离流后后面元素不易控制,故不首选)
2.增加vertical-align属性,改成下面酱紫就可以了:

div {
    display: inline-block;
    vertical-align:bottom;//居中,顶部,底部都可以
}
9、使用原生js 实现下图中所示的input和p标签点击删除自己

删除自己

考察点:document.getelementsByTagName、document.querySelectorAll、onclick、DOM节点删除、
可以通过getelementsByTagName一个个获取标签节点,但是如果标签很多,还是用querySelectorAll吧。注意子节点的删除方式。

 var tags = document.querySelectorAll('input,p');
 for (var i = 0; i < tags.length; i++) {
       tags[i].onclick = function () {
           this.parentNode.removeChild(this);//首先要找到当前节点的父节点,然后删除父节点的子节点
      }
 }
10、使用原生js给动态生成的button添加click事件

考察点:委托、监听、冒泡
注意:addEventListener的最后一个参数,默认false,在冒泡阶段执行;true,捕获阶段执行。
具体实现:

        var myBody = document.getElementsByTagName("body")[0];
        AddButton();
        function AddButton() {
            var bt = document.createElement("button");           //createElement生成button对象
            bt.innerHTML = '删除';
            myBody.appendChild(bt);                         //添加到页面
        }
        function fnHandler(e) {
            e = e || window.event;
            var t = e.target || e.srcElement;  //t:目标对象
            var tagName = t.tagName; //tagName标签名称
            if (tagName == 'BUTTON') {
                console.log('333333333333');
            }
        }
        function addEventHandler(oTarget, sEventType, fnHandler) {
            if (oTarget.addEventListener) {   //监听IE9,谷歌和火狐  
                oTarget.addEventListener(sEventType, fnHandler, false);
            } else if (oTarget.attachEvent) {  //IE  
                oTarget.attachEvent("on" + sEventType, fnHandler);
            } else {
                oTarget["on" + sEventType] = fnHandler;
            }
        }
        addEventHandler(myBody, 'click', fnHandler);
11、禁止浏览器回退

A、回退后,产生一个前进事件。
window.history.forward(1);
B、禁用键盘的backspace键,繁琐且没有办法消除鼠标的误操作。
C、h5新增,可消除后退的所有动作。包括 键盘、鼠标手势等产生的后退动作。

history.pushState(null, null, document.URL);//创建(添加)一个新的history实体,消除历史记录
window.addEventListener('popstate', function () {//监听
   history.pushState(null, null, document.URL);
});
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,026评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,655评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,726评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,204评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,558评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,731评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,944评论 2 314
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,698评论 0 203
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,438评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,633评论 2 247
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,125评论 1 260
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,444评论 3 255
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,137评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,103评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,888评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,772评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,669评论 2 271

推荐阅读更多精彩内容

  • HTML+CSS1.对WEB标准以及W3C的理解与认识标签闭合、标签小写、不乱嵌套、提高搜索机器人搜索几率、使用外...
    DaveWeiYong阅读 303评论 0 1
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,296评论 18 399
  • Doctype作用?标准模式与兼容模式各有什么区别? (1)、<!DOCTYPE>声明位于位于HTML文档中的第一...
    幺加幺阅读 1,178评论 2 50
  • 正确本身其实可能没有什么价值,当你是正确的,别人也是,那正确本身价值不大。 你是错的别人是对的,那就可怕了。 你是...
    爱一茶江泳阅读 52评论 0 0
  • 从会展地铁出来,风呼呼地吹,热。 中心城灯都熄了,皇庭剩下广告牌还在循环,只有四季和coco闪亮地屹立不倒。 这种...
    w00ds阅读 120评论 0 0