美文网首页
web前端面试之js基础(码动未来)

web前端面试之js基础(码动未来)

作者: share_tiger | 来源:发表于2018-12-22 12:41 被阅读0次

    web前端面试之js基础(码动未来)

    3.1.1、介绍js的基本数据类型

    Undefined、Null、Boolean、Number、String、Symbol(new in ECMAScript 2015)

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

    Object是 JavaScript 中所有对象的父对象

    数据封装类对象:Object、Array、Boolean、Number 和 String

    其他对象:Function、Arguments、Math、Date、RegExp、Error

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

    1.不要在同一行声明多个变量。

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

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

    4.不要使用全局函数。

    5.Switch语句必须带有default分支

    6.函数不应该有时候有返回值,有时候没有返回值。

    7.For循环必须使用大括号

    8.If语句必须使用大括号

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

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

    栈:原始数据类型(Undefined,Null,Boolean,Number、String)

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

    两种类型的区别是:存储位置不同;

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

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

    3.1.5、null,undefined 的区别?

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

    undefined表示不存在这个值。

    typeof undefined     //"undefined"

    undefined :是一个表示"无"的原始值或者说表示"缺少值",就是此处应该有一个值,但是还没有定义。当尝试读取时会返回 undefined;例如变量被声明了,但没有赋值时,就等于undefined

    typeof null         //"object"

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

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

    注意:

    在验证null时,一定要使用 === ,因为 == 无法分别 null 和 undefined

    参考http://www.ruanyifeng.com/blog/2014/03/undefined-vs-null.html

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

    use strict是一种ECMAscript 5 添加的(严格)运行模式,这种模式使得 Javascript 在更严格的条件下运行,使JS编码更加规范化的模式,消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为。默认支持的糟糕特性都会被禁用,比如不能用with,也不能在意外的情况下给全局变量赋值;

    全局变量的显示声明,函数必须声明在顶层,不允许在非函数代码块内声明函数,arguments.callee也不允许使用;消除代码运行的一些不安全之处,保证代码运行的安全,限制函数中的arguments修改,严格模式下的eval函数的行为和非严格模式的也不相同;

    提高编译器效率,增加运行速度;

    为未来新版本的Javascript标准化做铺垫。

    3.1.7、如何判断一个对象是否属于某个类?

    使用instanceof(待完善)

        if(a instanceof Person){

            alert('yes');

     }

    3.1.8、new操作符具体干了什么呢?

    1、创建一个空对象,并且 this 变量引用该对象,同时还继承了该函数的原型。

    2、属性和方法被加入到 this 引用的对象中。

    3、新创建的对象由 this 所引用,并且最后隐式的返回 this 。

    var obj  = {};

    obj.__proto__ = Base.prototype;

    Base.call(obj);

    3.1.9、用原生JavaScript的实现过什么功能吗?

    原生JavaScript常用的正则表达式

    原生JavaScript实现字符串长度截取

    原生JavaScript获取域名主机

    原生JavaScript清除空格

    原生JavaScript替换全部

    原生JavaScript转义html标签

    原生JavaScript还原html标签

    原生JavaScript时间日期格式转换

    原生JavaScript判断是否为数字类型

    原生JavaScript设置cookie值

    原生JavaScript获取cookie值

    原生JavaScript加入收藏夹

    原生JavaScript设为首页

    原生JavaScript判断IE6

    原生JavaScript加载样式文件

    原生JavaScript返回脚本内容

    原生JavaScript清除脚本内容

    原生JavaScript动态加载脚本文件

    原生JavaScript返回按ID检索的元素对象

    原生JavaScript返回浏览器版本内容

    原生JavaScript元素显示的通用方法

    3.1.10、documen.write和 innerHTML的区别

    document.write只能重绘整个页面

    innerHTML可以重绘页面的一部分

    3.1.11、数组和对象有哪些原生方法,列举一下?

    数组:join():将数组元素按指定的分隔符拼接成一字符串返回,默认分隔符为英文逗号

    sort(fn):数组排序,默认是按英文字母的ASC码升序排列,比如apple排在orange前面

    pop():删除数组的最后一个元素,把数组长度减 1,并且返回它删除的元素的值。

    push(n1,n2,n3,....nx):向数组末尾添加一个或多个元素,并返回添加后数组的长度

    reverse():颠倒数组中元素的顺序

    shift():删除数组的第一个元素,并返回它删除的那个元素

    slice(start,end):用于截取start和end之间的数组元素并存入新数组返回

    unshift(element1,.....,element):向数组开头添加一个或多个元素,并返回添加后的数组长度。至少要传一个参数。

    3.1.12、用js实现千位分隔符?(来源:前端农民工,提示:正则+replace)

    function commafy(num) {

         num = num + '';

         var reg = /(-?d+)(d{3})/;

         if(reg.test(num)){

         num = num.replace(reg, '$1,$2');

        }

        return num;

    }

    3.1.13、如何测试前端代码么?知道BDD, TDD, Unit Test么? 知道怎么测试你的前端工程么(mocha, sinon, jasmin, qUnit..)?

    3.1.14、前端templating(Mustache, underscore, handlebars)是干嘛的, 怎么用?

    Handlebars是一款很高效的模版引擎,提供语意化的模版语句,最大的兼容Mustache模版引擎, 提供最大的Mustache模版引擎兼容, 无需学习新语法即可使用;

    3.1.15、简述一下Handlebars的基本用法?

    Js语义模板库首先type设置为 type="text/x-handlebars-template

    使用Handlebars.compile()方法来预编译模板 

    #表示blocks’

     3.1.16、简述一下Handlerbars的对模板的基本处理流程, 如何编译的?如何缓存的?

    3.1.17、Object.is()与原来的比较操作符“ ===”、“ ==”的区别?

    两等号判等,会在比较时进行类型转换;

    三等号判等(判断严格),比较时不进行隐式类型转换,(类型不同则会返回false);

    Object.is在三等号判等的基础上特别处理了 NaN 、-0 和 +0 ,保证 -0 和 +0 不再相同,但 Object.is(NaN, NaN) 会返回 true.Object.is 应被认为有其特殊的用途,而不能用它认为它比其它的相等对比更宽松或严格。

    3.1.18、请指出JavaScript宿主对象 (host objects) 和原生对象 (native objects) 的区别?

    一、原生对象

      ECMA-262把原生对象(native object)定义为“独立于宿主环境的 ECMAScript 实现提供的对象”。

      Object、Function、Array、String、Boolean、Number、Date、RegExp、Error、EvalError、RangeError、ReferenceError、SyntaxError、TypeError、URIError、ActiveXObject(服务器方面)、Enumerator(集合遍历类)、RegExp(正则表达式)

      由此可以看出,简单来说,原生对象就是ECMA-262定义的类(引用类型)。

    二、宿主对象

      何为“宿主对象”?ECMAScript中的“宿主”当然就是我们网页的运行环境,即“操作系统”和“浏览器”。所有非原生对象都是宿主对象(host object),即由 ECMAScript 实现的宿主环境提供的对象。

      所有的BOM和 DOM 对象都是宿主对象。因为其对于不同的“宿主”环境所展示的内容不同。其实说白了就是,ECMAScript官方未定义的对象都属于宿主对象,因为其未定义的对象大多数是自己通过ECMAScript程序创建的对象。TML DOM 是 W3C 标准(是 HTML 文档对象模型的英文缩写,Document Object Model for HTML)。

      HTML DOM定义了用于 HTML 的一系列标准的对象,以及访问和处理 HTML 文档的标准方法。

      通过DOM,可以访问所有的 HTML 元素,连同它们所包含的文本和属性。可以对其中的内容进行修改和删除,同时也可以创建新的元素。

    3.1.19、例举3种强制类型转换和2种隐式类型转换?

    强制(parseInt,parseFloat,number)隐式(== – ===);

    QQ技术交流群:815302226

    相关文章

      网友评论

          本文标题:web前端面试之js基础(码动未来)

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