面试题

1 . Array.isArray(Array.prototype)输出什么? true

Array.prototype==[constructor:Array,xxx:function(){}]
所以是true

2.

var a=new Array(2);
console.log(a); //[undefined×2]数组构造函数参数是占位符
var b=new String(2);
console.log(b);//String {0: "2", length: 1, [[PrimitiveValue]]: "2"}  对象

3.

 var a=3;
 function c(){
    alert(a);
 }
 (function(){
  var a=4;
  c();    //3  在自执行函数中没有a变量,会沿着作用域链向上寻找,与定义的作用域有关,与执行作用域无关
 })();
var a=3;
 function c(a){
    alert(a);
 }
 (function(){
  var a=4;
  c(a);  //4  执行c函数时,先进行形参赋值,再执行的作用域查找
 })();

4.如何准确判断一个变量是数组类型?

  var ary=[];
  console.log(ary instanceof Array);  //true
  console.log(Object.prototype.toString.call(ary))  //[object Array]

5.写New 构造函数创建一个实例的过程

1.构造函数中this指向实例

2.执行代码对this的属性、方法赋值

3.隐式的从函数中返回出来

6.构造函数的特点

1.函数名首字母大写;

2.函数内不创建对象,也不显示返回对象;

3.函数内属性、方法添加到this上

4.实例需要New出来

5.创造一个类,

7.// 找出对象 obj 不在原型链上的属性(注意这题测试例子的冒号后面也有一个空格~)

// 1、返回数组,格式为 key: value
// 2、结果数组不要求顺序

题目 

  var C = function() {this.foo = 'bar'; this.baz = 'bim';};
  C.prototype.bop = 'bip';
  console.log(iterate(new C()));/*["foo: bar", "baz: bim"]*/

答案:

  function iterate(callback){
    var ary=[];
    for(var key in callback){
//      判断是不是私有属性
      if (callback.hasOwnProperty(key)){
        ary[ary.length]=callback[key]
      }
    }
    return ary
  }

8.有关浏览器的内核判断

主要分为四类:-o-/-ms-/-moz-/-webkit-
通过js的dom.style.XxxTransition进行相应的校验判断:
var div = document.createElement('div');
    var style = div.style;
    if (style.webkitTransition) {
        return '-webkit-';
    }
    if (style.MozTransition) {
        return '-moz-';
    }
    if (style.oTransition) {
        return '-o-';
    }
    if (style.msTransition) {
        return '-ms-';
    }
    return '';

9.页面的reflow渲染与repaint重绘

reflow渲染:对dom元素结构进行渲染;同时他会自动触发repaint页面重绘;它会改变自身和所有父元素,这种开销是非常昂贵的,页面元素越多,性能的下降会越明显;

repaint重绘:当进行重绘时,元素的外观会被改变,不过页面重绘不会影响dom结构的渲染;

display属性值会产生reflow和repaint;而visibility元素只会产生repaint而不会产生reflow

10.css的单位值归纳

主要分为四种:px/em/rem/%

px:相对于长度的绝对值单位,像素px是相对于屏幕分辨率而言的

em:em是相对长度单位。相对于当前对象内文本的字体尺寸。如当前对行内文本的字体尺寸未被人为设置,则相对于浏览器的默认字体尺寸。最初是指字母M的宽度,故名em。现指的是字符宽度的倍数,用法类似百分比,如:0.8em, 1.2em,2em等。通常1em=16px。

rem:css3新增的一个单位值,与em的区别在于设置字体时,相对的是html的根元素的字体颜色,这样就可以只需修改根元素的字体就可以调整所有的单位值了,避免了一些字体大小逐层符合引起的连锁反应;目前除了IE8及以下版本外的浏览器均支持给属性;

%:百分比的单位值设置,相对于当前元素的父元素的对应属性的宽度和高度的值进行设置

 

11.算法

console.log(1+ +"2"+"2");   //1+ Number(2)+"2"= "32"
console.log("A"- "B"+"2");  //NaN+"2"=NaN 
console.log(
"A"- "B"+2); //NaN+"2"=NaN

12.定义变量问题

  (function test(){
    var a=b=1;      //自执行函数作用域中定义a  ,同时b没有在该作用域找到,所以在全局定义了b  人话: 私有变量a=全局变量b=1;
  })();
  console.log(a);  //全局没有a a is not defined
  console.log(b);  //错误了,不执行

13.判断JS代码的值

<SCRIPT LANGUAGE="JavaScript">
var bb = 1;
function aa(bb) {
    bb = 2;
    alert(bb);
};
aa(bb);   //2
alert(bb);  //1
</SCRIPT>

JS传递参数是以值得方式进行传参,就是,参数再里面怎么变,外面不变

14.call与apply方法

function add(c, d){ 
return this.a + this.b + c + d; 
} 
var o = {a:1, b:3}; 
add.call(o, 5, 7);  //1+3+5+7
add.apply(o, [10, 20]);  //1+3+10+20

call,apply,bind都是Function.prototype上的方法,任何的Function的实例都可以调用他(主要指函数)

15.边框0与none不一样

border:none;表示边框的样式无,而border: 0表示边框的宽度为0,这两者在效果上是一样的,但是在实现上是不同的;同时需要注意的是,在设置了border-width时,还需要设置border-style,否则border不会显示出来的

16.如何获取一个字符串中的数字字符,并按数组形式输出,如

dgfhfgh254bhku289fgdhdy675gfh

输出[254,289,675]

方法一

  var ary=[];
  var temp="";
  for(var i=0;i<str.length;i++){
//      1.判断是否是数字
    if (str.charAt(i)<10&&str.charAt(i)>=0){
//      2.是数字,添加到字符串中
      temp+=str.charAt(i)
    }else{
//      3.不是数字,判断temp是否为空
      if (temp){
//      4.不为空,一起添加到数组中
        ary[ary.length]=temp;
        temp="";
      }
    }
  }
  console.log(ary)

方法二

  console.log(str.match(/\d+/g))

17.判断字符串中是否有连续的字母,有返回true,没有反之

 console.log(/([a-zA-Z])\1/.test("asdasd"))

\1是重复第一个分组

18.判断是否以元音字母结尾

  console.log(/[a,e,i,o,u]$/.test("zoo"));

19.截取字符串

给定字符串 str,检查其是否包含 3 个连续的数字 
1、如果包含,返回最新出现的 3 个数字的字符串 
2、如果不包含,返回 false**

  var str="asdasd154asd";
  function sliceStr(){
    var reg=/\d{3}/;
    var res="";
    if (res=reg.exec(str)){
      return res[0]
    }else{
      return false
    }
  }
console.log(sliceStr())

20.给定字符串 str,检查其是否符合如下格式 

1、XXX-XXX-XXXX 

2、其中 X 为 Number 类型**

  var reg=/^(\d{3}-){2}\d{4}$/;
  console.log(reg.test(str))

21.判断是否符合 USD 格式

**给定字符串 str,检查其是否符合美元书写格式 
1、以 $ 开始 
2、整数部分,从个位起,满 3 个数字用 , 分隔 
3、如果为小数,则小数部分长度为 2 
4、正确的格式如:$1,023,032.03 或者 $2.03,错误的格式如:$3,432,12.12 或者 $34,344.3**

  var str="$1,023,032.03";
  var reg=/^\$\d{1,3}(,\d{3})*(\.\d{2})?$/;
  console.log(reg.test(str))

22.敏感词过滤

   例子:敏感词过滤,比如 我爱北京天安门,天安门上太阳升。------我爱*****,****上太阳升。即北京和天安门变成*号,

  var str="我爱北京天安门,天安门上太阳升";
  var reg=/北京|天安门/g;
  str=str.replace(reg,function(){
    var l=""
    for(var i=0;i<arguments[0].length;i++){
      l+="*"
    }
    return l
  })

23.让2013-6-7 变成 2013.6.7

  str=str.replace(reg,function($0,$1,$2){
    console.log($0)
//    $0.,每一轮整个匹配结果
//    $1.第一个分组的匹配结果
//    $2.第二个分组的匹配结果
    return $1+"."
  });
  console.log(str)

 

posted @ 2018-04-07 09:46  追忆枉然  阅读(265)  评论(0编辑  收藏  举报