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

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基础(码动未来)_第1张图片

你可能感兴趣的:(web前端面试之js基础(码动未来))