$JavaScript(2)

2一、javascript有哪些方法定义对象

  • 对象字面量: var obj = {};javascript

  • 构造函数: var obj = new Object();前端

  • Object.create(): var obj = Object.create(Object.prototype);vue

2二、常见兼容性问题?

  • png24位的图片在iE6浏览器上出现背景,解决方案是作成PNG8java

  • 浏览器默认的marginpadding不一样。解决方案是加一个全局的*{margin:0;padding:0;}来统一,,可是全局效率很低,通常是以下这样解决:react

body,ul,li,ol,dl,dt,dd,form,input,h1,h2,h3,h4,h5,h6,p{
margin:0;
padding:0;
}
  • IE下,event对象有x,y属性,可是没有pageX,pageY属性jquery

  • Firefox下,event对象有pageX,pageY属性,可是没有x,y属性.程序员

2二、说说你对promise的了解

  • 依照 Promise/A+ 的定义,Promise 有四种状态:web

    • pending: 初始状态, 非 fulfilledrejected.后端

    • fulfilled: 成功的操做.数组

    • rejected: 失败的操做.

    • settled: Promise已被fulfilledrejected,且不是pending

  • 另外, fulfilled rejected一块儿合称 settled

  • Promise 对象用来进行延迟(deferred) 和异步(asynchronous) 计算

Promise 的构造函数

  • 构造一个 Promise,最基本的用法以下:

var promise = new Promise(function(resolve, reject) {

        if (...) {  // succeed

            resolve(result);

        } else {   // fails

            reject(Error(errMessage));

        }
    });
  • Promise 实例拥有 then 方法(具备 then 方法的对象,一般被称为thenable)。它的使用方法以下:

promise.then(onFulfilled, onRejected)
  • 接收两个函数做为参数,一个在 fulfilled 的时候被调用,一个在rejected的时候被调用,接收参数就是 futureonFulfilled 对应resolveonRejected对应 reject

2三、你以为jQuery源码有哪些写的好的地方

  • jquery源码封装在一个匿名函数的自执行环境中,有助于防止变量的全局污染,而后经过传入window对象参数,可使window对象做为局部变量使用,好处是当jquery中访问window对象的时候,就不用将做用域链退回到顶层做用域了,从而能够更快的访问window对象。一样,传入undefined参数,能够缩短查找undefined时的做用域链

  • jquery将一些原型属性和方法封装在了jquery.prototype中,为了缩短名称,又赋值给了jquery.fn,这是很形象的写法

  • 有一些数组或对象的方法常常能使用到,jQuery将其保存为局部变量以提升访问速度

  • jquery实现的链式调用能够节约代码,所返回的都是同一个对象,能够提升代码效率

2四、vue、react、angular

  • Vue.js
    一个用于建立 web 交互界面的库,是一个精简的 MVVM。它经过双向数据绑定把 View 层和 Model 层链接了起来。实际的 DOM 封装和输出格式都被抽象为了DirectivesFilters

  • AngularJS
    是一个比较完善的前端MVVM框架,包含模板,数据双向绑定,路由,模块化,服务,依赖注入等全部功能,模板功能强大丰富,自带了丰富的 Angular指令

  • react
    React 仅仅是 VIEW 层是facebook公司。推出的一个用于构建UI的一个库,可以实现服务器端的渲染。用了virtual dom,因此性能很好。

2五、Node的应用场景

  • 特色:

    • 一、它是一个Javascript运行环境
    • 二、依赖于Chrome V8引擎进行代码解释
    • 三、事件驱动
    • 四、非阻塞I/O
    • 五、单进程,单线程
  • 优势:

    • 高并发(最重要的优势)
  • 缺点:

    • 一、只支持单核CPU,不能充分利用CPU
    • 二、可靠性低,一旦代码某个环节崩溃,整个系统都崩溃

2六、谈谈你对AMDCMD的理解

  • CommonJS是服务器端模块的规范,Node.js采用了这个规范。CommonJS规范加载模块是同步的,也就是说,只有加载完成,才能执行后面的操做。AMD规范则是非同步加载模块,容许指定回调函数

  • AMD推荐的风格经过返回一个对象作为模块对象,CommonJS的风格经过对module.exportsexports的属性赋值来达到暴露模块对象的目的

2七、那些操做会形成内存泄漏?

  • 内存泄漏指任何对象在您再也不拥有或须要它以后仍然存在

  • setTimeout 的第一个参数使用字符串而非函数的话,会引起内存泄漏

  • 闭包、控制台日志、循环(在两个对象彼此引用且彼此保留时,就会产生一个循环)

2八、web开发中会话跟踪的方法有哪些

  • cookie

  • session

  • url重写

  • 隐藏input

  • ip地址

2九、介绍js的基本数据类型

  • UndefinedNullBooleanNumberString

30、介绍js有哪些内置对象?

  • Object JavaScript 中全部对象的父对象

  • 数据封装类对象:ObjectArrayBooleanNumberString

  • 其余对象:FunctionArgumentsMathDateRegExpError

3一、说几条写JavaScript的基本规范?

  • 不要在同一行声明多个变量

  • 请使用===/!==来比较true/false或者数值

  • 使用对象字面量替代new Array这种形式

  • 不要使用全局函数

  • Switch语句必须带有default分支

  • If语句必须使用大括号

  • for-in循环中的变量 应该使用var关键字明确限定做用域,从而避免做用域污

3二、JavaScript有几种类型的值?,你能画一下他们的内存图吗?

  • 栈:原始数据类型(UndefinedNullBooleanNumberString

  • 堆:引用数据类型(对象、数组和函数)

  • 两种类型的区别是:存储位置不一样;

  • 原始数据类型直接存储在栈(stack)中的简单数据段,占据空间小、大小固定,属于被频繁使用数据,因此放入栈中存储;

  • 引用数据类型存储在堆(heap)中的对象,占据空间大、大小不固定,若是存储在栈中,将会影响程序运行的性能;引用数据类型在栈中存储了指针,该指针指向堆中该实体的起始地址。当解释器寻找引用值时,会首先检索其

  • 在栈中的地址,取得地址后从堆中得到实体

                

3三、javascript建立对象的几种方式?

  • 对象字面量的方式

person={firstname:"Mark",lastname:"Yun",age:25,eyecolor:"black"};
  • function来模拟无参的构造函数

 function Person(){}
    var person=new Person();//定义一个function,若是使用new"实例化",该function能够看做是一个Class
        person.name="Mark";
        person.age="25";
        person.work=function(){
        alert(person.name+" hello...");
    }
person.work();
  • function来模拟参构造函数来实现(用this关键字定义构造的上下文属性)

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("麦兜",25,"coding");//实例化、建立对象
    maidou.eat();//调用eat方法
  • 用工厂方式来建立(内置对象)

var wcDog =new Object();
     wcDog.name="旺财";
     wcDog.age=3;
     wcDog.work=function(){
       alert("我是"+wcDog.name+",汪汪汪......");
     }
     wcDog.work();
  • 用原型方式来建立

function Dog(){

     }
     Dog.prototype.name="旺财";
     Dog.prototype.eat=function(){
     alert(this.name+"是个吃货");
     }
     var wangcai =new Dog();
     wangcai.eat();
  • 用混合方式来建立

function Car(name,price){
      this.name=name;
      this.price=price; 
    }
     Car.prototype.sell=function(){
       alert("我是"+this.name+",我如今卖"+this.price+"万元");
      }
    var camry =new Car("凯美瑞",27);
    camry.sell(); 

3四、eval是作什么的?

  • 它的功能是把对应的字符串解析成JS代码并运行

  • 应该避免使用eval,不安全,很是耗性能(2次,一次解析成js语句,一次执行)

  • JSON字符串转换为JSON对象的时候能够用eval,var obj =eval('('+ str +')')

3五、null,undefined 的区别?

  • undefined 表示不存在这个值。

  • undefined :是一个表示"无"的原始值或者说表示"缺乏值",就是此处应该有一个值,可是尚未定义。当尝试读取时会返回 undefined

  • 例如变量被声明了,但没有赋值时,就等于undefined

  • null 表示一个对象被定义了,值为“空值”

  • null : 是一个对象(空对象, 没有任何属性和方法)

  • 例如做为函数的参数,表示该函数的参数不是对象;

  • 在验证null时,必定要使用 === ,由于 ==没法分别null 和 undefined

3六、["1", "2", "3"].map(parseInt) 答案是多少?

  • [1, NaN, NaN]由于 parseInt 须要两个参数 (val, radix),其中radix 表示解析时用的基数。

  • map传了 3(element, index, array),对应的 radix 不合法致使解析失败。

3七、javascript 代码中的"use strict";是什么意思 ? 使用它区别是什么?

  • use strict是一种ECMAscript 5 添加的(严格)运行模式,这种模式使得 Javascript 在更严格的条件下运行,使JS编码更加规范化的模式,消除Javascript语法的一些不合理、不严谨之处,减小一些怪异行为

3八、JSON 的了解?

  • JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式

  • 它是基于JavaScript的一个子集。数据格式简单, 易于读写, 占用带宽小

  • JSON字符串转换为JSON对象:

var obj =eval('('+ str +')');
var obj = str.parseJSON();
var obj = JSON.parse(str);
  • JSON对象转换为JSON字符串:
var last=obj.toJSONString();
var last=JSON.stringify(obj);

3九、js延迟加载的方式有哪些?

  • deferasync、动态建立DOM方式(用得最多)、按需异步载入js

40、同步和异步的区别?

  • 同步:浏览器访问服务器请求,用户看获得页面刷新,从新发请求,等请求完,页面刷新,新内容出现,用户看到新内容,进行下一步操做

  • 异步:浏览器访问服务器请求,用户正常操做,浏览器后端进行请求。等请求完,页面不刷新,新内容也会出现,用户看到新内容

相关文章
相关标签/搜索