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