js面试题1

1. document load 和 document ready 的区别

页面加载完成有两种事件

load是当页面所有资源全部加载完成后(包括DOM文档树,css文件,js文件,图片资源等),执行一个函数

问题:如果图片资源较多,加载时间较长,onload后等待执行的函数需要等待较长时间,所以一些效果可能受到影响

$(document).ready()是当DOM文档树加载完成后执行一个函数 (不包含图片,css等)所以会比load较快执行

在原生的jS中不包括ready()这个方法,只有load方法就是onload事件

2. JavaScript 中如何检测一个变量是一个 String 类型?

三种方法(typeof,constructo,Object.prototype.toString.call())


3.请用 js 去除字符串空格?

replace 正则匹配方法、str.trim()方法、JQ 方法:$.trim(str)方法

方法一:replace 正则匹配方法

去除字符串内所有的空格:str = str.replace(/\s*/g,"");

去除字符串内两头的空格:str = str.replace(/^\s|\s$/g,"");

去除字符串内左侧的空格:str = str.replace(/^\s*/,"");

去除字符串内右侧的空格:str = str.replace(/(\s*$)/g,"");

方法二:str.trim()方法

trim()方法是用来删除字符串两端的空白字符并返回,trim 方法并不影响原来的字符串本身,它返回的是一个新的字符串。缺陷:只能去除字符串两端的空格,不能去除中间的空格

方法三:JQ 方法:$.trim(str)方法

.trim()函数会移除字符串开始和末尾处的所有换行符,空格(包括连续的空格)和制表符。如果这些空白字符在字符串中间时,它们将被保留,不会被移除。



4.js 是一门怎样的语言,它有什么特点

1.脚本语言。

JavaScript 是一种解释型的脚本语言,C、C++等语言先编译后执行,而 JavaScript 是在程序的运行过程中逐行进行解释。

2.基于对象。

JavaScript 是一种基于对象的脚本语言,它不仅可以创建对象,也能使用现有的对象。

3.简单。

JavaScript 语言中采用的是弱类型的变量类型,对使用的数据类型未做出严格的要求,是基于 Java 基本语句和控制的脚本语言,其设计简单紧凑。

4.动态性。

JavaScript 是一种采用事件驱动的脚本语言,它不需要经过 Web 服务器就可以对用户的输入做出响应。

5.跨平台性。

JavaScript 脚本语言不依赖于操作系统,仅需要浏览器的支持。

5.== 和 === 的不同

==是抽象相等运算符,而===是严格相等运算符。

==运算符是在进行必要的类型转换后,再比较。===运算符不会进行类型转换,所以如果两个值不是相同的类型,会直接返回false。

6.怎样添加、移除、移动、复制、创建和查找节点?

创建新节点

createDocumentFragment()//创建一个 DOM 片段createElement()//创建一个具体的元素createTextNode()//创建一个文本节点

添加、移除、替换、插入

appendChild()//添加removeChild()//移除replaceChild()//替换insertBefore()//插入

查找

getElementsByTagName()//通过标签名称getElementsByName()//通过元素的 Name 属性的值getElementById()//通过元素 Id,唯一性

7.事件委托是什么

利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!解析:

1、那什么样的事件可以用事件委托,什么样的事件不可以用呢?

适合用事件委托的事件:click,mousedown,mouseup,keydown,keyup,keypress。

值得注意的是,mouseover 和 mouseout 虽然也有事件冒泡,但是处理它们的时候需要特别的注意,因为需要经常计算它们的位置,处理起来不太容易。

不适合的就有很多了,举个例子,mousemove,每次都要计算它的位置,非常不好把控,在不如说 focus,blur 之类的,本身就没用冒泡的特性,自然就不用事件委托了。

2、为什么要用事件委托

1.提高性能


2.新添加的元素还会有之前的事件。

3、事件冒泡与事件委托的对比

事件冒泡:box 内部无论是什么元素,点击后都会触发 box 的点击事件

事件委托:可以对 box 内部的元素进行筛选

4、事件委托怎么取索引?

拓展:

键盘事件:keydown keypress keyup

鼠标事件:mousedown mouseup mousemove mouseout mouseover

8.javascript 对象的几种创建方式

第一种:Object 构造函数创建

这行代码创建了 Object 引用类型的一个新实例,然后把实例保存在变量 Person 中。

第二种:使用对象字面量表示法

对象字面量是对象定义的一种简写形式,目的在于简化创建包含大量属性的对象的过程。也就是说,第一种和第二种方式创建对象的方法其实都是一样的,只是写法上的区别不同在介绍第三种的创建方法之前,我们应该要明白为什么还要用别的方法来创建对象,也就是第一种,第二种方法的缺点所在:它们都是用了同一个接口创建很多对象,会产生大量的重复代码,就是如果你有 100 个对象,那你要输入 100 次很多相同的代码。那我们有什么方法来避免过多的重复代码呢,就是把创建对象的过程封装在函数体内,通过函数的调用直接生成对象。


9.JavaScript 继承的方式和优缺点

一、原型链继承

缺点:

1.引用类型的属性被所有实例共享

2.在创建 Child 的实例时,不能向 Parent 传参

二、借用构造函数(经典继承)

优点:

1.避免了引用类型的属性被所有实例共享

2.可以在 Child 中向 Parent 传参

缺点:

1.方法都在构造函数中定义,每次创建实例都会创建一遍方法。

三、组合继承

优点:

1.融合原型链继承和构造函数的优点,是 JavaScript 中最常用的继承模式。

四、原型式继承

缺点:

1.包含引用类型的属性值始终都会共享相应的值,这点跟原型链继承一样。

五、寄生式继承

缺点:

1.跟借用构造函数模式一样,每次创建对象都会创建一遍方法。

六、寄生组合式继承

优点:

1.这种方式的高效率体现它只调用了一次 Parent 构造函数,并且因此避免了在 Parent.prototype 上面创建不必要的、多余的属性。

2.与此同时,原型链还能保持不变;

3.因此,还能够正常使用 instanceof 和 isPrototypeOf。

开发人员普遍认为寄生组合式继承是引用类型最理想的继承范式

10.复杂数据类型如何转变为字符串

首先,会调用 valueOf 方法,如果方法的返回值是一个基本数据类型,就返回这个值,

如果调用 valueOf 方法之后的返回值仍旧是一个复杂数据类型,就会调用该对象的 toString 方法,

如果 toString 方法调用之后的返回值是一个基本数据类型,就返回这个值,

如果 toString 方法调用之后的返回值是一个复杂数据类型,就报一个错误。


11.javascript 的 typeof 返回哪些数据类型

7 种分别为stringbooleannumberObjectFunctionundefinedsymbol(ES6)

12.列举 3 种强制类型转换和 2 种隐式类型转换

强制(parseInt,parseFloat,Number)、隐式(+ -)

13.你对闭包的理解?优缺点?

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

三大特性:

函数嵌套函数。

函数内部可以引用外部的参数和变量。

参数和变量不会被垃圾回收机制回收。

优点:

希望一个变量长期存储在内存中。

避免全局变量的污染。

私有成员的存在。

缺点:

常驻内存,增加内存使用量。

使用不当会很容易造成内存泄露

虽然 sayHi 函数已经执行完毕,但是其活动对象也不会被销毁,因为 test 函数仍然引用着 sayHi 函数中的变量 name,这就是闭包。

但也因为闭包引用着另一个函数的变量,导致另一个函数已经不使用了也无法销毁,所以闭包使用过多,会占用较多的内存,这也是一个副作用。解析:由于在 ECMA2015 中,只有函数才能分割作用域,函数内部可以访问当前作用域的变量,但是外部无法访问函数内部的变量,所以闭包可以理解成“定义在一个函数内部的函数,外部可以通过内部返回的函数访问内部函数的变量“。在本质上,闭包是将函数内部和函数外部连接起来的桥梁。

14.如何判断 NaN

isNaN()方法解析:

15.new 一个对象的过程中发生了什么

16.for in 和 for of

1、for in

1.一般用于遍历对象的可枚举属性。以及对象从构造函数原型中继承的属性。对于每个不同的属性,语句都会被执行。

2.不建议使用 for in 遍历数组,因为输出的顺序是不固定的。

3.如果迭代的对象的变量值是 null 或者 undefined, for in 不执行循环体,建议在使用 for in 循环之前,先检查该对象的值是不是 null 或者 undefined

2、for of

1.for…of 语句在可迭代对象(包括 Array,Map,Set,String,TypedArray,arguments 对象等等)上创建一个迭代循环,调用自定义迭代钩子,并为每个不同属性的值执行语句


17. 如何判断 JS 变量的一个类型(至少三种方式)

typeofinstanceofconstructorprototype

18. for in、Object.keys Object.getOwnPropertyNames 对属性遍历有什么区别?

for in 会遍历自身及原型链上的可枚举属性

Object.keys 会将对象自身的可枚举属性的 key 输出

Object.getOwnPropertyNames 会将自身所有的属性的 key 输出

19.如何判断一个对象是否为数组

第一种方法:使用 instanceof 操作符。

第二种方法:使用 ECMAScript 5 新增的 Array.isArray()方法。

第三种方法:使用使用 Object.prototype 上的原生 toString()方法判断。

20.Object.prototype.toString.call() 和 instanceOf 和 Array.isArray() 区别好坏

Object.prototype.toString.call()

优点:这种方法对于所有基本的数据类型都能进行判断,即使是 null 和 undefined 。

缺点:不能精准判断自定义对象,对于自定义对象只会返回[object Object]

instanceOf

优点:instanceof 可以弥补 Object.prototype.toString.call()不能判断自定义实例化对象的缺点。

缺点: instanceof 只能用来判断对象类型,原始类型不可以。并且所有对象类型 instanceof Object 都是 true,且不同于其他两种方法的是它不能检测出 iframes。

Array.isArray()

优点:当检测 Array 实例时,Array.isArray 优于 instanceof ,因为 Array.isArray 可以检测出 iframes

缺点:只能判别数组

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,133评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,682评论 3 390
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,784评论 0 350
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,508评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,603评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,607评论 1 293
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,604评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,359评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,805评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,121评论 2 330
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,280评论 1 344
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,959评论 5 339
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,588评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,206评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,442评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,193评论 2 367
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,144评论 2 352

推荐阅读更多精彩内容

  • 第一章 前端三大语言:HTML(专门编写网页内容)、CSS(编写网页样式)、JS(专门编写网页交互行为) 能简写尽...
    fastwe阅读 951评论 0 0
  • 第5章 引用类型(返回首页) 本章内容 使用对象 创建并操作数组 理解基本的JavaScript类型 使用基本类型...
    大学一百阅读 3,231评论 0 4
  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,171评论 0 3
  • JavaScript语言精粹 前言 约定:=> 表示参考相关文章或书籍; JS是JavaScript的缩写。 本书...
    微笑的AK47阅读 580评论 0 3
  • 今天乳山全天在下雨,早晨起来接上姐夫去市场采购海鲜,海鲜价格还真的挺实惠,又是龙虾又是大虾,中午时候去姐夫大哥家自...
    易如人生阅读 238评论 0 0