前端面试之js篇(一)

作者: Xindot | 来源:发表于2017-03-15 22:46 被阅读117次

Q1:JavaScript包含哪些数据类型,请分别写出3种以上类型的判断函数如:isString()?

//js有6种数据类型(5种基本数据类型、1种复杂数据类型)
    1.String字符串; 2.Number数字; 3.Boolean布尔; 4.Null空对象指针; 5.Undefined没有定义
    6.Object对象; 
    7.Function函数; 8.Array数组;
//isString(str)
    ① typeof 'str' === "string"
    ② Object.prototype.toString.call('str') === "[object String]"
    ③ String('str') === 'str'
//isNumber(num)
    方法一:!isNaN(parseFloat(1)) && isFinite(1)
    方法二:typeof 1 === "number" && !isNaN(1)
    方法三:typeof 1 === "number" && isFinite(1)
    方法四:Object.prototype.toString.call(1) === "[object Number]"
    方法五:1 === +1
//isBoolean(b)
    ① Object.prototype.toString.call(true) === "[object Boolean]"
    ② typeof false === "boolean"
//isNull(null)
    ① Object.prototype.toString.call(null) === "[object Null]"
    ② typeof null === "object"
//isUndefined()
    ① Object.prototype.toString.call() === "[object Undefined]"
    ② typeof a === "undefiend"
//isObject(obj)
    ① Object.prototype.toString.call({}) === "[object Object]"
    ② typeof {} === "object"
//isFunction(func)
    ① Object.prototype.toString.call(function(){}) === "[object Function]"
    ② typeof funciton(){} === "function"
    //js固有函数
    ③ Object.prototype.toString.call(clear) === "[object Function]"
    ③ typeof clear === ”function“
//isArray(arr)
    ① Object.prototype.toString.call([]) === "[object Array]"
    ② typeof [] === "object"

Q2:编写一个JavaScript函数,实时显示当前时间,格式"年-月-日 时-分-秒"?

setInterval(function(){
    var time = new Date(),
        yyyy = time.getFullYear(),
        M = time.getMonth()+1,
        d = time.getDate(),
        h = time.getHours(),
        m = time.getMinutes(),
        s = time.getSeconds(),
        MM = M<10?('0'+M):M,
        dd = d<10?('0'+d):d,
        hh = h<10?('0'+h):h,
        mm = m<10?('0'+m):m,
        ss = s<10?('0'+s):s;
    var now = yyyy+'-'+MM+'-'+dd+' '+hh+':'+mm+':'+ss;
    console.log(now);
},1000)
//ES6

Q3:如何显示/隐藏一个DOM元素?

//js
document.getElementById("text").style.display="none"
//jQuery
$('.a').hide(1000); $('.a').show(5000); $('.a').toggle(1000)
$('.a').addClass('hide'); $('.a').removeClass('hide'); $('.a').toggleClass('hide')
//vue
<div v-if="a">demo1</div>
<div v-if="{hide:a}">demo2</div>
data层改变a的布尔值

Q4:如何添加html元素的事件处理,有几种方法?

...

Q5:如何控制alert中的换行?

// 关于alert的内容还行问题,参考了很多人的意见,在这里我做一个总结,当然我们平时只要使用一种能达到效果的方法即可:
// 这个与使用的浏览器也有关系
// 在使用alert弹窗过程中,对于大部分浏览器,只要遇到字符串 添加 “\n”  即可实现换行,有些浏览器则可能添加 “\r\n” ,如下:
<script type="text/javascript">
alert('hello \n world!');
alert('Hello \r\n Javascript!');
alert('\t这句话应\t\n'); // alert 的换行居中显示
</script>

Q6:判断一个字符串中出现次数最多的字符,统计这个次数?

// 判断一个字符串中出现次数最多的字符,统计这个次数
const str = 'goodboyy';
const maxObj = Mmax(str);
console.log(maxObj);
function Mmax(str) {
  const obj = {}; // 去重之后的对象,{char:'g',num:1}
  const max = { char: '', num: 0 }; // 最大次数的字符
  for (let i = 0; i < str.length; i++) {
    if (obj[str[i]]) {
      ++obj[str[i]];
    } else {
      obj[str[i]] = 1;
    }
    if (obj[str[i]] > max.num) {
      max.num = obj[str[i]];
      max.char = str[i];
    }
  }
  return {
    str,
    obj,
    max,
  };
}

Q7:判断字符串是否是这样组成的:第一个必须是字母,后面可以是字母、数字、下划线、总长度为5-30?

/^[a-zA-Z]\w{4,29}$/.test('d5342345') // true

Q8:请编写一个JavaScript函数parseQueryString,它的用途是把URL参数解析为一个对象,如:var url = "xxx.com/index.html?key0=0&key1=1&key2=2"

var url = "http://www.taobao.com/index.php?key0=0&key1=1&key2=2.............";
var obj = parseQueryString(url);
       
function parseQueryString(argu){
  var str = argu.split('?')[1];
  var result = {};
  var temp = str.split('&');
  for(var i=0; i<temp.length; i++)
  {
     var temp2 = temp[i].split('=');
     result[temp2[0]] = temp2[1];
  }
  return result;
}

Q9:在页面中有如下html,要求用闭包方式写一个js从文本框中取出值并在标签span中显示出来?

<div id="field">
    <input type="text" value="user name">           
</div>
<span class="red"></span>

Q10:在IE6.0下面是不支持position:fixed的,请写一个js使用<div id="box"></div>固定在页面的右下角?

...

Q11:请实现鼠标到页面中的任意标签,显示出这个标签的基本矩阵轮廓?

...

Q12:js的基本对象有哪些,window和documnet的常用方法和属性列出来?

...

Q13:JavaScript中如何对一个对象进行深度clone?

...

Q14:js中如何定义class,如何扩展prototype?

// 思路:
// JS中定义class是通过function,有点类似C++语言中的struct概念。要定义class只需要定义function,并注意this的使用。
function MyClass() {
  this.a = '2';// 可以通过this定义属性
}
MyClass.prototype.say = function () { // 扩充方法
  return 'hello';
};
MyClass.prototype.mValue = '3';// 扩充属性

var mc = new MyClass();
alert(mc.a);
alert(mc.say());
alert(mc.mValue);

Q15:ajax是什么?ajax的交互模型?同步和异步的区别?如何解决跨域问题?

...

Q16:请给出异步加载js方案,不少于两种?

...

Q17:多浏览器检测通过什么?

...

Q18:讲述一个你所了解的前端开发的优化方式?

...

相关文章

网友评论

    本文标题:前端面试之js篇(一)

    本文链接:https://www.haomeiwen.com/subject/ivzcnttx.html