共计 8521 个字符,预计需要花费 22 分钟才能阅读完成。
1.js 组成
ECMAScript,形容了该语言的语法和根本对象。
文档对象模型(DOM),形容解决网页内容的办法和接口。
浏览器对象模型(BOM),形容与浏览器进行交互的办法和接口。
2.js 代码能够运行在什么中央
次要运行在浏览器中,你看到的绝大部分网页都含有 Javascript。
局部运行在服务器中,次要用于生成网页代码,当然,其余的事也能够做,但比拟少。
也有局部用 Javacript 开发的软件(电脑版、手机版都有)。
3.js 外面的内置函数及对象有哪些
对象:Array Object Date String Number Boolean … RegExp
函数:slice() splice() join() toString() sort() concat() reverse() isNaN() isFinite()
4. 什么是深拷贝和浅拷贝,如何进行浅拷贝
深拷贝:值拷贝,在内存中克隆一份与原数据完全一致的数据,变量的指针指向不同的内存地址
浅拷贝:地址拷贝,两个变量指向雷同的内存地址
5.css3 布局机制
display: 扭转元素的默认个性 inline/block/inline-block
浮动布局:浮动元素的特点(脱离文档流)float:left/right/none
定位布局:position:
static: 动态定位(默认文档流)
absolute: 相对定位
relative: 绝对定位
fixed:固定定位和相对定位类似
sticky: 粘滞定位(例如左右两侧导航栏常常用到)relative+fixed
flex 布局:伸缩盒容器,伸缩盒元素
栅格布局(第三方布局机制,利用浮动布局或者定位布局封装的企业级布局机制)bootstrap
6. 列出十个数组实例能够调用的属性和办法
Array.prototype.pop(): 删除数组最初一个元素,并返回这个元素。
Array.prototype.push(): 在数组的开端减少一个或多个元素,并且返回数组的新长度。
Array.prototype.reverse(): 颠倒数组中元素的排列程序,即原先的第一个变为最初一个,原先的最初一个变为第一个。
Array.prototype.shift(): 删除数组的第一个元素并返回这个元素。
Array.prototype.sort(): 对数组进行排序,并返回排序后的数组。
Array.prototype.splice(): 在任意地位给数组增加或删除任意个元素。
Array.prototype.unshift(): 在数组结尾减少一个或多个元素,并返回数组新长度。
Array.prototype.concat(): 返回一个由以后数组和其余若干个数组或若干个非数组值组合而成的新数组。
Array.prototype.join(): 连贯所有数组元素组成一个字符串。
Array.prototype.slice(): 抽取以后数组中的一段元素组合成一个新数组。
Array.prototype.toString(): 返回一个有所有数组元素组成的字符串,当然还有一些其余字符串。
Array.prototype.toLocaleString(): 返回一个由所有数组元素组合而成的本地化后的字符串。
Array.prototype.indexOf(): 返回数组中第一个与指定值相等的元素的索引,如果找不到这样的元素,则返回 -1。
Array.prototype.lastIndexOf(): 返回数组中最初一个与指定值相等的元素的索引,如果找不到这样的元素则返回 -1。
Array.prototype.forEach(): 为数组中每个元素执行一次回调函数。
Array.prototype.every(): 如果数组中的每个元素都满足测试函数,则返回 true, 否则返回 false。
Array.prototype.some(): 如果数组中至多有一个元素满足测试函数,则返回 true, 否则返回 false。
Array.prototype.filter(): 将所有在过滤函数中返回 true 的数组元素放在一个新数组中并返回。
Array.prototype.map(): 返回一个由回调函数的返回值组成的新数组。
Array.prototype.reduce(): 从左到右为每个数组元素执行一次回调函数,并把上次回调函数的返回值放在一个暂存器中传给下次回调函数,并返回最初一次回调函数的返回值。
7. 列出十个 String 类型能够调用的属性和办法并解释别离代表什么意思
length 返回字符串长度
charAt(i) 返回指定地位的字符
charCodeAt() 返回指定字符的字符编码
concat 连贯字符串
slice() 截取字符串(开始地位, 完结地位) 不包含完结地位的字符
substring() 截取字符串(开始地位,完结地位)不包含完结地位的字符
substr() 截取字符串(开始地位,截取字符个数)
trim() 删除前置以及后置中的所有空格,返回后果
toLowerCase() 转换为小写
toUpperCase() 转换为大写
indexOf() 从前往后查找指定字符所在位置
lastIndexOf() 从后往前查找字符串所在位置,能够有第二个参数,代表从字符串中哪个地位开始查找。
8. 写出 10 条 linux 常用命令并解释
查看全格局的全副过程 ps -ef
革除屏幕内容 clear
列出历史命令 history
查看以后用户 who am i
切换到超级管理员身份 su
切换到用户 su 用户名
身份切换,执行命令时长期晋升权限 sudo 其余命令
查看以后所在门路 pwd
切换到指定目录中 cd 文件名 / 文件夹名
查看所有文件和暗藏文件 ls -a
查看所有文件和暗藏文件,除了. 和.. ls -A
长格局列出所有的文件和目录 ls -l
9. 写出 5 条罕用 git 命令并解释
git init 初始化本地文件夹为本地 git 仓库
git clone xxx.git 从近程仓库 xxx.git 中克隆下载内容到本地,是生成一个本地仓库的。
git pull origin master 更新代码,提交代码前肯定先更新代码
git add . 将要提交的所有文件增加到缓存区,liuyr.txt
git commit -m ‘ 提交的正文 ’ 将缓存区的内容提交到本地仓库里
git push origin master 将本地仓库里的内容推送到近程仓库
git remote -v 查看以后本地仓库与哪些近程仓库绑定
git remote add origin xxx.git 将本地仓库与近程仓库 xxx.git 绑定,并给该近程仓库起名称为 origin
git remote remove origin 移除以后本地仓库绑定的 origin 名称的近程仓库
10. 解释什么是 arguments
argument 对象蕴含了函数调用的参数数组,通过这种形式你能够很不便的找到最初一个参数的值。arguments 是一个对应于传递给函数的参数的类数组对象。
11. 如何创建对象?对象的创立形式有几种?
单个对象创立
构造函数形式 new Object()
对象字面量形式 {}
批量对象创立
工厂模式,所有创立进去的对象都是 Object 类型
构造函数模式,实例能够分类,然而办法冗余
原型模式,所有实例的属性和办法都在构造函数的原型对象中,对于每一个实例所公有的属性和办法不敌对。
构造函数 + 原型模式(组合模式),实例公有的属性和办法放到构造函数中,实例公共的属性和办法放到原型对象中。
12. 重构 forEach filter map every some 其中的一个
//some
Array.prototype.mySome = function (fun, obj) {
for (var i = 0; i < this.length; i++) {
// obj?test():test1()
if ((obj ? fun.bind(obj)(this[i]) : fun(this[i]))) {return true;}
}
return false;
}
var arr = [1, 2, 3, 4, 5];
var res = arr.mySome(function (item) {
console.log(this);// 指向全局 global
return item > 1;// 短路准则
}, {name: ‘zhangsan’})
console.log(res);
//forEach
Array.prototype.myforEach = function (callback) {
//callback,示意这个参数不是一个一般变量,而是一个回调函数
for (var i = 0; i < this.length; i++) {
var element = this[i];
callback(element, i, this);
}
}
var Arr = [0, 5, 2, 3, 4];
Arr.myforEach(function (item, index, arr) {
console.log(item, index, arr);
});
//every
Array.prototype.myEvery = function (fun, obj) {
for (var i = 0; i < this.length; i++) {
// obj?test():test1()
if (!(obj ? fun.bind(obj)(this[i]) : fun(this[i]))) {return false;}
}
return true;
}
var arr = [1, 2, 3, 4, 5];
var res = arr.myEvery(function (item) {
console.log(this);// 指向全局 global
return item > 1;// 短路准则
}, {name: ‘zhangsan’})
console.log(res);
//filter
Array.prototype.myFilter = function (fun, obj) {
var res = [];
for (var i = 0; i < this.length; i++) {
if (fun(this[i])) {res.push(this[i]);
}
}
return res;
}
var arr = [1, 2, 3, 4, 5];
var res = arr.myFilter(function (item) {
console.log(this);// 指向全局 global
return item > 2;// 新数组
}, {name: ‘zhangsan’})
console.log(res);
//map
Array.prototype.myMap = function (fun, obj) {
var res = [];
for (var i = 0; i < this.length; i++) {
res.push(obj ? fun.bind(obj)(this[i]) : fun(this[i]));
}
return res;
}
var arr = [1, 2, 3, 4, 5];
var res = arr.myMap(function (item) {
console.log(this);// 指向全局 global
return item + 1;// 新数组
}, {name: ‘zhangsan’})
console.log(res);
13.js 和 html 和 css 技术之间得关联性
HTML 用于形容页面的构造,CSS 用于管制页面中元素的款式,JavaScript 用于响应用户操作.
14. 阿里云在咱们开发中表演什么角色
阿里云能够提供一个近程服务器,能够应用它进行 linux 学习,js 学习,也能够用于搭建集体网站。
阿里云等云服务器个别作为我的项目的部署服务器,须要在阿里云上装置一些我的项目部署的环境,须要把握根本的命令操作和 vim 操作。
15. 简述事件流和事件冒泡
产生在嵌套的 html 构造中,为每层 html 都绑定事件
事件捕捉:由外层元素到内层元素
事件冒泡:由内层元素到外层元素,个别事件处理函数的执行沿着事件冒泡的程序进行
16. 事件代理机制
不将事件处理函数间接绑定到指标 dom 元素上,而是绑定在其父元素上。其益处在于只须要在父元素绑定就能够为所有的子元素代理事件,当子元素动静增加或者删除的时候也不会影响。
17. 对一个数组应用算法排序 var arr=[1,3,5,7,6,9];
// 冒泡
function sort (arr) {
for (var j = 0; j < arr.length – 1; j++) {
// 两两比拟,如果前一个比后一个大,则替换地位。for (var i = 0; i < arr.length - 1 - j; i++) {if (arr[i] > arr[i + 1]) {var temp = arr[i];
arr[i] = arr[i + 1];
arr[i + 1] = temp;
}
}
}
}
18. 什么是闭包? 闭包得作用,闭包得优缺点。
闭包就是指有权拜访另一个函数作用域中的变量的函数, 闭包是一种非凡的对象. 定义在一个函数外部的函数
长处和作用:一个是能够读取函数外部的变量,另一个就是让这些变量的值始终保持在内存中。
毛病:1. 因为闭包会使得函数中的变量都被保留在内存中,内存耗费很大,所以不能滥用闭包,否则会造成网页的性能问题,在 IE 中可能导致内存泄露,这是 IE 的 BUG。
2. 闭包会在父函数内部,扭转父函数外部变量的值。所以,如果你把父函数当作对象(object)应用,把闭包当作它的专用办法(Public Method),把外部变量当作它的公有属性(private value),这时肯定要小心,不要轻易扭转父函数外部变量的值。多个子函数的 scope 都是同时指向父级,是齐全共享的。因而当父级的变量对象被批改时,所有子函数都受到影响。
19.js 得特点
JavaScript 是一种解释型的脚本语言,JavaScript 是在程序的运行过程中逐行进行解释。
JavaScript 是一种基于对象的脚本语言。
JavaScript 是一种基于 Java 根本语句和控制流之上的简略而紧凑的设计,从而对于学习 Java 是一种十分好的过渡。它的变量类型是采纳弱类型,并未应用严格的数据类型。
JavaScript 是动静的,它能够间接对用户或客户输出做出响应,毋庸通过 Web 服务程序。它对用户的反映响应,是采纳以事件驱动的形式进行的。
JavaScript 是依赖于浏览器自身,与操作环境无关,只有能运行浏览器的计算机,并反对 JavaScript 的浏览器就可正确执行。从而实现了“编写一次, 走遍天下”的幻想。
JavaScript 是一种安全性语言,它不容许拜访本地的硬盘,并不能将数据存入到服务器上,不容许对网络文档进行批改和删除,只能通过浏览器实现信息浏览或动静交互。从而无效地避免数据的失落。
20.js 得根本数据类型
String、Number、Boolean、Null、Undefined、Symbol。
21. 写出 5 个 Math 实力能够调用得办法
Math.min() // 求一组数中的最小值
Math.max() // 求一组数中的最大值
Math.ceil() 向上舍入
Math.floor() 向下舍入
Math.round() 四舍五入
Math.random() 返回大于 0 小于 1 的一个随机数 [0,1)
abs(num) 返回 num 绝对值
exp(num) 返回 Math.E 的 num 次幂
log(num) 返回 num 的自然对数
pow(num,power) 返回 num 的 power 次幂
sqrt(num) 返回 num 的平方根
scos(x) 返回 x 的反余弦值
asin(x) 返回 x 的反正弦值
atan(x) 返回 x 的反正切值
atan2(y,x) 返回 y / x 的反正切值
cos(x) 返回 x 的余弦值
sin(x) 返回 x 的正弦值
tan(x) 返回 x 的正切值
22. 函数得调用形式有几种,并阐明他们的区别?
办法调用模式: 先定义一个对象,而后在对象的属性中定义方法,通过 myobject.property 来执行办法,this 即指以后的 myobject 对象。
函数调用模式: 定义一个函数,设置一个变量名保留函数,这时 this 指向到 window 对象。
结构器调用模式: 定义一个函数对象,在对象中定义属性,在其原型对象中定义方法。在应用 prototype 的办法时,必须实例化该对象能力调用其办法。
apply,call 调用模式
23.== 和 === 有什么区别?
== 两边值类型不同的时候,要先进行类型转换为同一类型后,再比拟值是否相等。只有值相等即可为真.
=== 不做类型转换,类型不同的后果肯定不等。要求不仅值相等,而且也要求类型雷同。
24.DOM 中怎么追加、插入、移除、复制和获取节点
appendChild 办法承受一个节点对象作为参数,将其作为最初一个子节点,插入以后节点。该办法的返回值就是插入文档的子节点。
insertBefore 办法用于将某个节点插入父节点外部的指定地位。
removeChild 办法承受一个子节点作为参数,用于从以后节点移除该子节点。返回值是移除的子节点。
replaceChild 办法用于将一个新的节点,替换以后节点的某一个子节点。
cloneNode() 办法返回调用该办法的节点的一个正本.cloneNode()浅复制,cloneNode(true)深复制。
document.getElementById(id) 通过元素 id 来查找元素
document.getElementsByTagName(name) 通过标签名来查找元素
document.getElementsByClassName(name) 通过类名来查找元素
document.querySelector() 返回文档中匹配指定的 CSS 选择器的第一元素
document.querySelectorAll() 是 HTML5 中引入的新办法,返回文档中匹配的 CSS 选择器的所有元素节点列表
25. 谈谈你对于原型和原型链的了解?
每个构造函数都有一个原型对象与之对应实例能够调用原型对象中的办法及属性,实例的原型默认为其构造函数的原型对象。通过原型能够实现原型链继承能够通过_proto__来拜访对象的原型,通过 Object.setPrototypeOf、Object.getPrototypeOf 来设置或者获取原型。
26.ajax 是什么?你在开发中如何应用 ajax?
ajax 是异步的 JavaScript 和 XML。用来进行异步申请。浏览器能够向服务器发送一个 ajax 申请,进行页面的部分刷新。
应用 ajax:原生的 ajax、jQuery 封装的 ajax、独自的 http 封装的第三方的库 axios
原生 ajax:
var httpRequest = new XMLHttpRequest();
// 建设连贯
httpRequest.open(‘get’,‘http://47.106.244.1:8099/mana…’);
// 发送申请
httpRequest.send();
// 承受响应
httpRequest.onreadystatechange = function () {
// http 申请实现,并且状态是 200 的时候,代表申请胜利
if (httpRequest.readyState === 4 && httpRequest.status === 200) {
// 获取响应数据
console.log(httpRequest.responseText);
}
if (httpRequest.readyState === 4 && httpRequest.status === 500) {
console.log(‘谬误:’+ httpRequest.responseText);
}
}
27. 阐明援用传递和值传递区别
值传递是指根本数据类型在办法中的传递,援用传递是指援用数据类型在办法中的传递. 值传递传递的是一个值,而援用传递传递的是一个对象。
28.js 中如何监听一个对象中属性的变动
var obj = {name:“terry”,age:1}
Object.defineProperty(obj,“age”,{
configurable:true,
set(){},
get(){}
})
obj.age++; // 当为 obj.age 赋值的时候就会调用 set 办法,达到动态 age 值扭转的目标
29. 阐明 RegExp.prototype.test()与 String.prototype.search()的异同点
都是用于检测字符串中是否有满足正则表达式的内容
test() 是正则表达式对象调用的,反对全局检索
search() 是字符串调用的,不反对全局检索
30.css 选择器的优先级如何计算?
由三个因素决定,特权,个性值,程序决定
特权:在规定的前面增加!important
个性值:
1000 申明在 style 属性中的
100 id 选择器
10 类选择器,伪类选择器
1 元素选择器,伪元素选择器
程序:当个性值雷同,后者笼罩前者
31. 简述 CSS 盒子模型
CSS 盒子模型分为 W3C 规范盒子(内容盒子) 模型和 IE 盒子 (边框盒子) 模型。
盒子模型是由内容区、padding 区、border 区、margin 区组成。盒子模型互相转换应用 box-sizing 属性,属性值 content-box 代表 W3C 规范盒子模型,即设置的宽高是内容区的宽高,属性值 border-box 代表 IE 盒子模型,即设置的宽高是盒子的宽高。
32.typeof 返回值 number string boolean undefined function object NaN