1,js中的new做了什么?

function Person () {
this.name = name;
this.age = age;
this.sex = sex this.sayName = function () {
return this.name;
};
} var person = new Person("tom", 21, "famle"); console.log(person.name);

使用关键字new创建新实例对象经过了以下几步:

  1. 创建一个新对象
  2. 将新对象的_proto_指向构造函数的prototype对象
  3. 将构造函数的作用域赋值给新对象 (也就是this指向新对象)
  4. 执行构造函数中的代码(为这个新对象添加属性)
  5. 返回新的对象
var Obj = {};

Obj._proto_ =  Person.prototype();

Person.call(Obj);

2,JS原型对象

1. 对比其他语言的理解

原型对象,就是其它语言中的类中的静态属性和静态方法,总是是静态-static就对了.原理是: 内存中只有一份.

2. 从代码的层次上介绍原型对象.

function Person(name_, age_) {
this.name = name_;
this.age = age_;
this.location = "地球";
}
// 三个具体的对象
var zhangsan = new Person("zhangsan", 21);
var lilei = new Person("lilei", 21);
var hanmeimei = new Person("hanmeimei", 21);
// 他们的原型对象是
Person.prototype.location = "地球";
Person.prototype.killPerson = function() {
return "杀人";
};

3,原型链查找

当代码获取某个对象的属性时,首先会在对象实例本身内查找,如果查找不到,就会向上搜索其原型对象。因此在实例中改变原型对象中的属性值,并不会重写这个属性值,只是原型对象中的属性值被屏蔽了而已。

4,Javascript闭包

闭包就是能够读取其他函数内部变量的函数

作用:闭包可以用在许多地方。它的最大用处有两个,一个是前面提到的可以读取函数内部的变量,另一个就是让这些变量的值始终保持在内存中。

5,js运行机制

所有任务可以分成两种,一种是同步任务(synchronous),另一种是异步任务(asynchronous)。同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。

(1)所有同步任务都在主线程上执行,形成一个执行栈(execution context stack)。

(2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。

(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。

(4)主线程不断重复上面的第三步。

https://segmentfault.com/a/1190000015294769

6,js排序

冒泡,选择,快排

7,["1", "2", "3"].map(parseInt)输出结果是多少?(多次出现)

输出结果:[1, NAN, NAN]

原因:

parseInt('1', 0); // 1 (parseInt的处理方式,这个地方item没有以"0x"或者"0X"开始,8和10这个基数由实现环境来定,ES5规定使用10来作为基数,因此这个0相当于传递了10)

parseInt('2', 1); // NaN (因为parseInt的定义,超出了radix的界限)如果该参数小于 2 或者大于 36返回NaN

parseInt('3', 2); // NaN (虽然没有超出界限,但是二进制里面没有3,因此返回NaN)

8,use strict是什么?有什么意义?

1,use strict 是一种在JavaScript代码运行时自动实行更严格解析和错误处理的方法

好处:

1,防止忽略或静默失败的代码错误。会产生错误或抛出异常,因此尽早提醒你代码中的问题,使调试更加容易。

2,防止意外的全局变量。非严格模式下,不带关键字声明的变量,会自动创建该名称的全局变量.在严格模式下,这样做的话会抛出错误。

3,消除 this 强制。如果没有严格模式,引用null或未定义的值到 this 值会自动强制到全局变量。这可能会导致许多令人头痛的问题和让人恨不得拔自己头发的bug。在严格模式下,引用 null或未定义的 this 值会抛出错误。

4,不允许重复的属性名称或参数值。当检测到对象(例如,var object = {foo: "bar", foo: "baz"};)中重复命名的属性,或检测到函数中(例如,function foo(val1, val2, val1){})重复命名的参数时,严格模式会抛出错误,因此捕捉几乎可以肯定是代码中的bug可以避免浪费大量的跟踪时间。

5,使eval() 更安全。在严格模式和非严格模式下,eval() 的行为方式有所不同。最显而易见的是,在严格模式下,变量和声明在 eval() 语句内部的函数不会在包含范围内创建(它们会在非严格模式下的包含范围中被创建,这也是一个常见的问题源)。

6,在 delete使用无效时抛出错误。delete操作符(用于从对象中删除属性)不能用在对象不可配置的属性上。当试图删除一个不可配置的属性时,非严格代码将默默地失败,而严格模式将在这样的情况下抛出异常。

9,json是什么?

1,json一种轻量级的数据交互格式

2,JSON.parse()【从一个字符串中解析出json对象】

3,JSON.stringify()【从一个对象中解析出字符串】

10,js实现延迟加载的几种方法?

1,使用setTimeout延迟方法的加载时间

2,js外部引入的文件放到页面底部

3,defer 属性

4,async 属性

5,动态创建DOM方式

11,创建一个ajax?

<script type="text/javascript">
window.onload = function(){
//第一步:创建xhr对象
//xhr是一个对象;里面可以放很多东西,数据;
var xhr = null;
if(window.XMLHttpRequest){//标准浏览器
xhr = new XMLHttpRequest();//创建一个对象
}else{//早期的IE浏览器
xhr = new ActiveXObject('Microsoft.XMLHTTP');//参数是规定的;
}
console.log("状态q"+xhr.readyState);//
//第二步:准备发送请求-配置发送请求的一些行为
//open即打开链接,第一个参数是以什么方式;第二个是往哪儿发送请求,第三个可以不写,默认true,表示异步,false表示同步;;
xhr.open('get','03form.php',true);
console.log("状态w"+xhr.readyState);// //第三步:执行发送的动作
//send也可以写在前面,推荐写在后面;写null是兼容问题;
xhr.send(null);
console.log("状态e"+xhr.readyState);// //第四步:指定一些回调函数,也属于事件函数;不触发不执行,触发条件是xhr.readyState;z这个值有0-4,共5个状态,是由浏览器控制的;
xhr.onreadystatechange = function(){
if(xhr.readyState == 4){//4指服务器返回的数据可以使用;
if(xhr.status == 200){ //判断已经成功的获取了数据;200表示hTTP请求成功;404表示找不到页面;503表示服务器端有语法错误;
var data = xhr.responseText;//json,文本,主角;
// var data1 = xhr.responseXML;
}
}
// console.log("状态t"+xhr.readyState);//2表示已经发送完成; // console.log(1234);
} // console.log(456);
console.log("状态r"+xhr.readyState);// }
</script>

12,apply()与call()的作用和区别?

/*apply()方法*/
function.apply(thisObj[, argArray]) /*call()方法*/
function.call(thisObj[, arg1[, arg2[, [,...argN]]]]);

作用:可以用来代替另一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象

区别:

apply:最多只能有两个参数——新this对象和一个数组argArray。如果给该方法传递多个参数,则把参数都写进这个数组里面,当然,即使只有一个参数,也要写进数组里。如果argArray不是一个有效的数组或arguments对象,那么将导致一个TypeError。如果没有提供argArray和thisObj任何一个参数,那么Global对象将被用作thisObj,并且无法被传递任何参数。

call:它可以接受多个参数,第一个参数与apply一样,后面则是一串参数列表。这个方法主要用在js对象各方法相互调用的时候,使当前this实例指针保持一致,或者在特殊情况下需要改变this指针。如果没有提供thisObj参数,那么 Global 对象被用作thisObj。

13,阻止冒泡的几种方法?

if (evt.stopPropagation) {
//W3C
evt.stopPropagation();
}
else {
//IE
evt.cancelBubble = true;
}

14,Array.of()和Array.from()区别?

1,Array.of方法用于将一组值,转换为数组

2,Array.from方法用于将两类对象转为真正的数组:类似数组的对象(array-like object)和可遍历(iterable)的对象(包括 ES6 新增的数据结构 Set 和 Map)

15,

let a = Array.of(7)

let b = Array.from({length: 7})

let c = Array(7)

console.log(a)

console.log(b)

console.log(c)

输出结果:?

16,生成0-99的数组方式(不使用for循环一类的)?

Array.from({length:100},(val,i)=>i);

17,判断字符类型方法?

typeof   2      输出   number

typeof   null   输出   object

typeof   {}    输出   object

typeof    []    输出   object

typeof   (function(){})   输出  function

typeof    undefined         输出  undefined

typeof   '222'                 输出    string

typeof  true                   输出     boolean

精准判断:Object.prototype.toString.call

    var   gettype=Object.prototype.toString

        gettype.call('aaaa')       输出      [object String]

        gettype.call(2222)         输出      [object Number]

        gettype.call(true)         输出      [object Boolean]

        gettype.call(undefined)   输出      [object Undefined]

        gettype.call(null)        输出   [object Null]

       gettype.call({})           输出   [object Object]

       gettype.call([])          输出   [object Array]
gettype.call(function(){}) 输出 [object Function]

18,数组的方法?

19,js数据类型?

基本数据类型:

String

Number

Boolean

Undefined

Null

Symbol(暂时不管)

引用数据类型:

JavaScript中的引用数据类型有:

Array

Object

20,校验手机号js?

function isPoneAvailable(str) {
var myreg=/^[1][3,4,5,7,8,9][0-9]{9}$/;
if (!myreg.test(str)) {
return false;
alert("请填写正确的手机号码")
} else {
return true;
alert("手机号码填写正确")
}
}

js基础面试篇的更多相关文章

  1. JS基础入门篇(三十五)—面向对象(二)

    如果没有面向对象这种抽象概念的小伙伴,建议先看一下我写的JS基础入门篇(三十四)-面向对象(一)

  2. JS基础入门篇(二十七)—BOM

    虽然上次写到js基础篇(二十四),这次直接写到(二十七).是为了提醒自己中间有几篇没写.特此说明一下啊. 1.window.open() 使用a标签呢,点击一下a标签页面才会跳转,有时候我们需要做的操 ...

  3. JS基础DOM篇之二:DOM级别与节点层次?

    通过上一篇我们大致了解了什么是DOM,今天我们继续深入了解. 1.DOM级别       在大家阅读DOM标准的时候,可能会看到DOM(0/1/2/3)级的字眼,这就是DOM级别.但实际上,DOM0级 ...

  4. JS基础DOM篇之一:何为DOM?

    近日在园子看了一篇文章,一位前端负责人问应聘者何为DOM事件流的三个阶段,我当时一看也是懵圈,于是强迫症复发,遂想要搞清楚它.谁知在查资料的过程中发现有好多关于DOM的概念也是模糊不清,便决定继续延伸 ...

  5. JS基础学习篇(一)

    近来一直在学习js和jquery.刚刚进入前端工作还没有多久,虽然大学里学习的是编程自认为也学的还可以,但前端接触的不多,一直认为前端十分简单.其实不然,特别是工作的时候要自己设计一个完整的项目前端, ...

  6. vue.js基础知识篇(6):组件详解

    第11章:组件详解 组件是Vue.js最推崇也最强大的功能之一,核心目标是可重用性. 我们把组件代码按照template.style.script的拆分方式,放置到对应的.vue文件中. 1.注册 V ...

  7. arcgis api 4.x for js 基础工具篇之测距测面

    前言 在搭建好WebGIS应用框架的时候,相信大家首先开发的都会是基础功能,此篇文章我们主要讲述的是“测距”."测面"功能. 注* 在测量单位中常规都是基于"平面坐标系& ...

  8. JS基础入门篇(六)— 数据类型

    1.数据类型 数据类型:我感觉就是对数据的种类进行分类.就好比把人分为儿童,青少年,中年,老年一样. 基础数据类型: Number(数字),String(字符串),Null(空),Undefined( ...

  9. vue.js基础知识篇(7):表单校验详解

    目录 网盘 第12章:表单校验 1.npm安装vue-validator $ npm install vue-validator 代码示例: var Vue=require("vue&quo ...

随机推荐

  1. 技术笔记1:java.sql.SQLException: Access denied for user 'root'@'localhost' (using password)

    在myEclipse10中运行java项目的时候,遇到java.sql.SQLException: Access denied for user 'root'@'localhost' (using p ...

  2. JavaScript如何让1+1=11;{ } + { } = 2

    delete (          ) delete (          ) ;var  n = new Number( 1 ) console.log( n + 1 )   // 2  #请在括号 ...

  3. H3C_IRF_LACP配置

    IRF典型配置举例(LACP MAD检测方式)1. 组网需求 由于公司人员激增,接入层交换机提供的端口数目已经不能满足 PC 的接入需求.现需要在保护现有投资的基础上扩展端口接入数量,并要求网络易管理 ...

  4. 转载:sql练习(针对Mysql)

    感谢     https://www.cnblogs.com/DreamDrive/p/6193530.html 创建表: DROP TABLE DEPT; --部门表 CREATE TABLE DE ...

  5. 引擎设计跟踪 地形LOD的改进

    虽然地形已经有LOD和形变(geomorphing, 这里简称morphing)来进行LOD的渐变,从而避免bump, 但是如果LOD级别过多,远处的高山就会严重丢失细节,比如变成尖尖的凸起,非常丑陋 ...

  6. skimage

    它是由python语言编写的,   子模块名称 主要实现功能 io 读取.保存和显示图片或视频 data 提供一些测试图片和样本数据 color 颜色空间变换 filters 图像增强.边缘检测.排序 ...

  7. DevExpress 控件汉化代码和使用方法

    DevExpress 第三方控件汉化的全部代码和使用方法   DevExpress.XtraEditors.Controls  此控件包中包含的控件最多,包括文本框,下拉列表,按钮,等等        ...

  8. 详解在Linux下实现(彩色)进度条程序,并通过makefile进行编译.

    彩色进度条的实现与makefile编译: 创建一个process文件,在里面编写实现进度条的代码    1.在编写代码的时候我们首先要区分两个转义字符:\n \r \n:表示换行,换到下一行,并位于起 ...

  9. 解决java新开页面被拦截的问题

    在开发中遇到from表单利用 target="_blank" 属性新开页面时被拦截. 用ajax让form表单提交,这时有可能浏览器会拦截新开页面,这时只 需要设置 ajax 同步 ...

  10. 使用korofileheader插件vs code添加文件头注释和函数注释

    korofileheadervs code添加文件头注释和函数注释1.extensions搜索fileheader,安装koroFileHeader2.设置:edit=>perference=& ...