资讯专栏INFORMATION COLUMN

前端面试基本知识点——javascript

hankkin / 1050人阅读

摘要:又到一年春招季,们又要奔波于一场又一场的面试。今天就先来小小总结一下方面的知识点,方便你我他。在发送请求前加上。在后面加上时间搓。这样页面的所有都会执行这条语句就是不需要保存缓存记录。如何解决跨域问题服务器上设置代理页面

又到一年春招季,coder们又要奔波于一场又一场的面试。今天就先来小小总结一下javascript方面的知识点,方便你我他。随时补充

js基本数据类型

Undefined、Null、Boolean、Number、String
ECMAScript2015新增了Symbol(创建后独一无二的数据类型)

js的内置对象

数据封装对象:Object,Array,Boolean,Number,String
其他对象:Function,Arguments,Math,Date,RegExp,Error

js基本规范

1.不要在同一行声明多个变量
2.请使用===/!==来比较Boolean或者数值
3.生命数组变量时,尽量使用[]代替new Array
4.拒绝全局函数
5.Switch语句必须带有default分支

js原型,原型链及其特点

每个对象都会有一个内部初始化的属性,就是原型(prototype),当我们寻找一个对象的属性,如果内部属性本身不存在,就到对象的原型里面去找,这个原型又会有自己的原型,就这样一步步地找下去,这就是所谓的原型链。

Javascript有几种类型的值?及关于他们的内存图

栈:原始数据类型(基本数据类型)
堆:引用数据类型(对象,数组,函数)
两种类型的区别:储存的位置不同

将字符串转换为数字?

1.‘12.3b’ parseFloat("12.3b");解析成浮点数
2."12b"   parseInt("12b");解析成整数

如何将浮点数小数点左边的每三位添加一个逗号

    function commafy(num){
       return num && num
                     .toString()
                     .replace(/(d)(?=(d{3})+./g,function($1, $2){
                     return $2 + ",";
                     });
    }

如何实现数组的随机排序?var arr = [1,2,3,4,5,6,7,8]

方法一
    
    function RandomSort(arr){
    for (var i = 0,len = arr.length;i < len;i++){
       var rand = parseInt(Math.random() * len);
        var a;
        a = arr[rand]; 
        arr[rand]  = arr[i];
        arr[i] = a;
    } 
     return arr;   
    }
        
方法二
    
    function RandomSort2(arr){
    var a = [];
    while(arr.length > 0){
    var rand = parseInt(Math.random() * arr.length);
    a.push(arr[rand]);
    arr.splice(rand,1);
    }
     return a;   
    }
        
方法三
    
    function RandomSort3(arr){
     function sortBy(){
         return Math.random() - 0.5;
     }
     arr.sort(sortBy());
    }
        

Javascript如何实现继承?
1.构造继承
2.原型继承
3.实力继承
4.拷贝继承
前两种比较简单,建议用前两种的组合方式
1.构造函数实现继承就是借助call或者apply把父类中的函数通过this指复制到子类创建的实例中。

function Parent() {
  this.colors = ["black","white"];
}
function Child() {
  Parent.call(this);
}
var child1 = new Child();
alert(child1.colors);//"black,white"

2.原型函数实现继承

function Parent(){
        this.name = "liuwen";
    }

    function Child(){
        this.age = 28;
    }
    Child.prototype = new Parent();//继承了Parent,通过原型

    var demo = new Child();
    alert(demo.age);
    alert(demo.name);//得到被继承的属性

javascript创建对象的几种方法
1.使用对象字面量

 var Cat  = {};//JSON
 Cat.name="kity";//添加属性并赋值
 Cat.age=2;
 Cat.sayHello=function(){
  alert("hello "+Cat.name+",今年"+Cat["age"]+"岁了");//可以使用“.”的方式访问属性,也可以使用HashMap的方式访问
 }
 Cat.sayHello();//调用对象的(方法)函数
2.用function来模拟无参的构造函数
function Person(){
   }
   var personOne=new Person();//定义一个function,如果有new关键字去"实例化",那么该function可以看作是一个类
   personOne.name="liuwen";
   personOne.hobby="coding";
   personOne.work=function(){
   alert(personOne.name+" is coding now...");
   }
   personOne.work();
3.用function来模拟有参构造函数(拓展性强,推荐使用)
function Pet(name,age,hobby){
  this.name=name;//this作用域:当前对象
  this.age=age;
  this.hobby=hobby;
  this.eat=function(){
     alert("我叫"+this.name+",我喜欢"+this.hobby+",也是个吃货");
  }
   }
   var maidou =new Pet("麦兜",5,"睡觉");//实例化/创建对象
maidou.eat();//调用eat方法(函数)
4.用工厂模式来创建(内置对象Object)
var liuWen = new Object();
liuWen.name = "刘雯";
liuWen.age = 21;
liuWen.work = function() {
  alert("i am" + liuWen.name);
}
liuWen.work();
5.用原型方式来创建
function Dog(){

}
Dog.prototype.name="旺财";
Dog.prototype.eat=function(){
alert(this.name+"是个吃货");
}
var liuwen =new Dog();
liuwen.eat();
6.用混合模式创建
function Car(name,price){
 this.name=name;
 this.price=price;
   }
Car.prototype.sell=function(){
  alert("我是"+this.name+",我现在卖"+this.price+"万元");
 }
   var camry =new Car("liuwen",27);
   camry.sell();

this的理解

this指的是函数的直接调用者

this指的是new出来的实例对象

this指的是事件中触发事件的对象

特殊的,在IE的attachEvent中,this总是指全局对象window

什么是window对象?什么是document对象?

   window指的是浏览器窗口;document是文档(html),属于window的一个属性。

null和undefined的区别

   null是一个空值,表示一个对象为空值(我是空的)
   undefined表示一个声明过的变量没有赋予值(不知道我是谁)
   typeOf undefined;//"undefined"
   typeOf null; //"object"
   区别null和undefined用===;

事件是什么?火狐和IE事件机制的区别?以及如何阻止冒泡事件

事件是在网页中的某个操作,类似于(点击,键盘)

IE是事件冒泡,火狐事件捕获,事件冒泡都支持(事件冒泡是由子节点到父节点层层向外,捕获刚好相反);

阻止冒泡事件 event.stopPropagation();

什么是闭包?为什么要用它

   闭包就是有权访问另一个函数作用域的函数,简单来做就是在一个函数的内部创建另外一个函数,通过这个内部函数访问外部函数的局部变量,将外部函数内部的方法变量传递到外部。   
   闭包的特性:
   1. 内部函数有权访问外部函数的作用域,变量及函数
   2. 函数内再嵌套函数
   3. 变量和函数不会被垃圾回收制回收
//li节点的onclick事件都能正确的弹出当前被点击的li索引
  • index = 0
  • index = 1
  • index = 2
  • index = 3
执行say667()后,say667()闭包内部变量会存在,而闭包内部函数的内部变量不会存在 使得Javascript的垃圾回收机制GC不会收回say667()所占用的资源 因为say667()的内部函数的执行需要依赖say667()中的变量 这是对闭包作用的非常直白的描述 function say667() { // Local variable that ends up within closure var num = 666; var sayAlert = function() { alert(num); } num++; return sayAlert; } var sayAlert = say667(); sayAlert()//执行结果应该弹出的667

Javascript中,有一个函数,执行时对象查找时,永远不会去查找原型,这个函数是?

   hasOwnProperty
   javascript的hasOwnProperty返回的是一个布尔值,它可以检测到这个对象本身具有属性,不能检测到原型链上。
   object.hasOwnProperty(proName)
   其中参数object是必选项。一个对象的实例。
   proName是必选项。一个属性名称的字符串值。

JSON的了解

   JSON是javascript的一个子集,它是轻量级,简单,易操作的数据交换格式。
   1. 将JSON字符串转化为JSON对象;
   var obj =eval("("+ str +")");
   var obj = str.parseJSON();
   var obj = JSON.parse(str);
   2. JSON对象转换为JSON字符串:
   var str=obj.toJSONString();
   var str=JSON.stringify(obj);

js延迟加载

   defer和async,动态创建dom(最常用),按需异步载入js

Ajax是什么?如何创建Ajax?

   向服务器发送请求的时候我们不必等待,可以同时做其他事情,页面也不会整页刷新,提高用户效率。
   (1)创建XMLHttpRequest对象,也就是创建一个异步调用对象
   (2)创建一个新的HTTP请求,并指定该HTTP请求的方法、URL及验证信息
   (3)设置响应HTTP请求状态变化的函数
   (4)发送HTTP请求
   (5)获取异步调用返回的数据
   (6)使用JavaScript和DOM实现局部刷新   

Ajax 解决浏览器缓存问题?

   1、在ajax发送请求前加上 anyAjaxObj.setRequestHeader("If-Modified-Since","0")。
   
   2、在ajax发送请求前加上 anyAjaxObj.setRequestHeader("Cache-Control","no-cache")。
   
   3、在URL后面加上一个随机数: "fresh=" + Math.random();。
   
   4、在URL后面加上时间搓:"nowtime=" + new Date().getTime();。
   
   5、如果是使用jQuery,直接这样就可以了 $.ajaxSetup({cache:false})。这样页面的所有ajax都会执行这条语句就是不需要保存缓存记录。

如何解决跨域问题?

   jsonp、 iframe、window.name、window.postMessage、服务器上设置代理页面

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/81919.html

相关文章

  • 前端开发-从入门到Offer - 收藏集 - 掘金

    摘要:一些知识点有哪些方法方法前端从入门菜鸟到实践老司机所需要的资料与指南合集前端掘金前端从入门菜鸟到实践老司机所需要的资料与指南合集归属于笔者的前端入门与最佳实践。 工欲善其事必先利其器-前端实习简历篇 - 掘金 有幸认识很多在大厂工作的学长,在春招正式开始前为我提供很多内部推荐的机会,非常感谢他们对我的帮助。现在就要去北京了,对第一份正式的实习工作也充满期待,也希望把自己遇到的一些问题和...

    sf_wangchong 评论0 收藏0
  • Deep in JS - 收藏集 - 掘金

    摘要:今天同学去面试,做了两道面试题全部做错了,发过来给道典型的面试题前端掘金在界中,开发人员的需求量一直居高不下。 排序算法 -- JavaScript 标准参考教程(alpha) - 前端 - 掘金来自《JavaScript 标准参考教程(alpha)》,by 阮一峰 目录 冒泡排序 简介 算法实现 选择排序 简介 算法实现 ... 图例详解那道 setTimeout 与循环闭包的经典面...

    enali 评论0 收藏0
  • 面试宝典

    摘要:有谈谈面试与面试题对于前端面试的一些看法。动态规划算法的思想及实现方法帮大家理清动态规划的解决思路以及原理方法前端经典面试题从输入到页面加载发生了什么这是一篇开发的科普类文章,涉及到优化等多个方面。极客学院前端练习题道练习题,面试季练练手。 由数据绑定和排序引入的几个 JavaScript 知识点 在 JavaScript 的数据绑定和做简单的表格排序中遇到的几个知识点 [[JS 基础...

    neu 评论0 收藏0
  • 前端识点整理

    摘要:难怪超过三分之一的开发人员工作需要一些知识。但是随着行业的饱和,初中级前端就业形势不容乐观。整个系列的文章大概有篇左右,从我是如何成为一个前端工程师,到各种前端框架的知识。 为什么 call 比 apply 快? 这是一个非常有意思的问题。 作者会在参数为3个(包含3)以内时,优先使用 call 方法进行事件的处理。而当参数过多(多余3个)时,才考虑使用 apply 方法。 这个的原因...

    Lowky 评论0 收藏0
  • 前端识点整理

    摘要:难怪超过三分之一的开发人员工作需要一些知识。但是随着行业的饱和,初中级前端就业形势不容乐观。整个系列的文章大概有篇左右,从我是如何成为一个前端工程师,到各种前端框架的知识。 为什么 call 比 apply 快? 这是一个非常有意思的问题。 作者会在参数为3个(包含3)以内时,优先使用 call 方法进行事件的处理。而当参数过多(多余3个)时,才考虑使用 apply 方法。 这个的原因...

    snowLu 评论0 收藏0
  • 前端经典文章

    摘要:上周末看这篇文章时,偶有灵光,所以,分享出来给大家一起看看前端面试四月二十家前端面试题分享请各位读者添加一下作者的微信公众号,以后有新的文章,将在微信公众号直接推送给各位,非常感谢。 前端切图神器 avocode 有了这个神器,切图再也腰不酸,腿不疼了。 这一次,彻底弄懂 JavaScript 执行机制 本文的目的就是要保证你彻底弄懂javascript的执行机制,如果读完本文还不懂,...

    lowett 评论0 收藏0

发表评论

0条评论

hankkin

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<