200 请求已成功,请求所但愿的响应头或数据体将随此响应返回。javascript
400 请求参数有误或者语义有误,当前请求没法被服务器理解。css
401 当前请求须要用户验证html
404 请求失败,请求所但愿获得的资源未被在服务器上发现。前端
500 服务器遇到了一个不曾预料的情况,致使了它没法完成对请求的处理。vue
JS有哪些内置对象?java
Array: \- concat: 合并 \- join: 链接成字符串 \- pop: 移除最后元素 \- push: 添加元素 \- shift: 移除第一个元素 \- slice: 返回数组的一段 \- sort: 排序 \- reverse: 反转 Date: \- get/setDate, get/setTime \- get/setFullYear, get/setYear, get/setMonth, get/setDay \- get/setHours, get/setMinutes, get/setSeconds RegExp: \- g: 全文查找 \- i: 忽略大小写 \- m: 多行查找 String: \- charAt: 返回指定索引位置的字符 \- match: 使用正则进行查找,并返回查找结果 Math: \- ceil: 向上取整,floor: 向下取整 \- round: 四舍五入 \- random: 随机数
1.typeof 能够判断的的类型有 undefined Boolean Number String Object 注意 使用typeof 判断 Array 和 null结果均为 object type = typeof a // 结果为undefined Boolean Number String Object 2.instanceof c instanceof Array 3.根据对象的 constructor c.constructor === Array // 继承的时候会出错 4.prototype 原型链方式 alert(Object.prototype.toString.call(a) === ‘[object String]’) -------> true; alert(Object.prototype.toString.call(b) === ‘[object Number]’) -------> true; alert(Object.prototype.toString.call(c) === ‘[object Array]’) -------> true; alert(Object.prototype.toString.call(d) === ‘[object Date]’) -------> true; alert(Object.prototype.toString.call(e) === ‘[object Function]’) -------> true; alert(Object.prototype.toString.call(f) === ‘[object Function]’) -------> true;
1.split()
将一个字符串分割为子字符串,将结果做为字符串数组返回,若字符串中存在多个分割符号,亦可分割。
形式:
stringObj.split([separator,[,limit]])
stringObj 必选项 string对象或者文字 该对象不会被split方法修改
separator 可选项 字符串或者正则表达式对象
limit 可选项 返回数组中的元素个数node
把数组中的全部元素放入一个字符串中
形式:
arrayObj.join(separator);
separator 可选项 省略该参数,则使用逗号做为分割符react
方法名 | 用途 | 改变原数组 |
---|---|---|
pop | 删除最后一个并返回,改变原数组 | 是 |
push | 向数组末尾添加元素,并返回新的长度 | 是 |
unshift | 向数组开头添加元素,并返回新的长度 | 是 |
reverse | 颠倒数组顺序 | 是 |
shift | 将第一个元素删除而且返回,空即为undefined | 是 |
splice | splice(start,length,item)新增删除替换数组元素,返回被删除数组,无删除不返回 | 是 |
sort | 对数组排序,改变原数组 | 是 |
concat | 链接多个数组,返回新的数组 | 否 |
join | 将数组中全部元素以参数做为分隔符放入一个字符串 | 否 |
slice | slice(start,end),返回选定元素 | 否 |
split | 分割 (字符串操做) | 否 |
var xhr = new XMLHttpRequest(); xhr.open(url); xhr.send();
GET - 从指定的资源请求数据。
POST - 向指定的资源提交要被处理的数据webpack
请求方式 | 缓存 | 请求是否保留在浏览器历史记录 | 是否可收藏为书签 | 长度限制 |
---|---|---|---|---|
GET | 可被缓存 | 保留 | 可收藏 | 有长度限制 |
POST | 不可被缓存 | 不保留 | 不可收藏 | 无长度限制 |
请写出如下这段JS代码的输出结果,并解释缘由。es6
var num = 100;
var obj = {
num: 200, inner: { num: 300, print: function () { console.log(this.num); } }
};
obj.inner.print(); // 300 隐式绑定 调用栈:obj -> inner -> print
var func = obj.inner.print;
func(); // 100 默认绑定 调用栈:window -> func
(obj.inner.print)(); // 300 隐式绑定 调用栈:window -> obj -> inner -> print
(obj.inner.print = obj.inner.print)(); // 100 隐式丢失
DOM事件流包括哪几个阶段?
请使用原生JavaScript为如下li实现事件委托,点击后打印其对应的node-type属性值。
<ul id="test">
<li node-type='1'>惠普金融</li> <li node-type='2'>爱钱进</li> <li node-type='3'>硅谷中心</li>
</ul>
已知构造函数A,请实现B函数,须要继承A
var A = function(name) {
this.name = name;
};
A.prototype = {
fun1: function() {}, fun2: function() {}
};
请写出如下这段JS代码的输出结果,并解释缘由。
var num = 100;
function print() {
console.log(num); var num;
}
print(); //undefined 闭包
请写出如下这两段JS代码的输出结果,并分别解释缘由。
// a.js
(function(num){
console.log(num); var num = 10;
}(100)); // 100
// b.js
(function(num){
console.log(num); var num = 10; function num(){}; // function num() { … } 代码解析阶段
}(100));
// JavaScript 中,函数及变量的声明都将被提高到函数的最顶部。
// JavaScript 中,变量能够在使用后声明,也就是变量能够先使用再声明。
// JavaScript 初始化不会提高
其实主要理解 js 的解析机制就行。遇到 script 标签的话 js 就进行预解析,将变量 var 和 function 声明提高但不会执行 function,而后就进入上下文执行,上下文执行仍是执行预解析一样操做直到没有 var 和 function,就开始执行上下文。
Number、String 、Boolean、Null和Undefined。
基本数据类型是按值访问的,由于能够直接操做保存在变量中的实际值。
引用数据类型,也就是对象类型Object type,好比:Function、Object、Date、RegExp、Number、String、Boolean和自定义类等
/* \* 返回变量的具体类型名称 \* @param obj 待断定的变量 */ function getType(value) { var a = Object.prototype.toString.call(value).split(" ")[1]; return a.substring(0,a.length-1) }
$.ajax({ type: "POST",//方法类型 dataType: "json",//预期服务器返回的数据类型 url: url ,//url data: data, success: function (result) { }, error : function() { } });
请编写一个JS函数parseQueryString,它的用途是把URL参数解析为一个对象,如:
var url = "http://example.cn/index.html?key0=0&key1=1&key2=2";
function parseQueryString(url) {
var params = {};
var urls = url.split("?");
var arr = urls[1].split("&");
for (var i = 0, l = arr.length; i < l; i++) {
var a = arr[i].split("="); params[a[0]] = a[1];
}
return params;
}
当ajax发送请求后,在等待server端返回的这个过程当中,前台会继续 执行ajax块后面的脚本,直到server端返回正确的结果才会去执行success,也就是说这时候执行的是两个线程,ajax块发出请求后一个线程 和ajax块后面的脚本(另外一个线程)
当执行当前AJAX的时候会中止执行后面的JS代码,直到AJAX执行完毕后时,才能继续执行后面的JS代码。
var obj = { fullName: "javascript", prop: { getFullName: function () { return this.fullName; } } }; console.log(obj.prop.getFullName()); // undefined var test = obj.prop.getFullName;// undefined console.log(test());
var name = "window"; var Tom = { name: "Tom", show: function() { console.log(this.name); }, wait: function() { var fun = this.show; fun(); } }; Tom.wait(); // undefined
'abc'.repeatify(3) // abcabcabc
var str = 'hello<img src="haha.png" alt="哈哈" />world'; // 正则匹配输出'hello\[哈哈\]world'
javaScript window.onload事件和jQuery ready函数有何不一样
加载时机 | 必须等待网页所有加载完毕(包括图片等),而后再执行JS代码 | 只须要等待网页中的DOM结构加载完毕,就能执行JS代码 |
执行次数 | 只能执行一次,若是第二次,那么第一次的执行会被覆盖 | 能够执行屡次,第N次都不会被上一次覆盖 |
var a = 8;
let r = 9;
// 分开考虑下面的结果
let a = r == 9 || 4;
console.log(a); // 标识符已经被声明
let b = r == 9 || 4;
console.log(b) // true
29.写出如下代码运行结果
var data =[]; for (let k = 0; k < 3; k++) { data[k] = function () { console.log(k); }; } data[0](); // 0 data[1](); // 1 data[2](); // 2 若上述for循环中换为var 则输出为 3 3 3
// es 6 解构 let a = 1, b = 2; [a, b] = [b, a]; // 2 数组的特性 b = [a,a=b][0]; // 3 亦或 a ^= b; b ^= a; a ^= b;
function confirmEnding(str, target) {
}
写出计算一个整数的阶乘的方法(定义一个方法编写)
// 递归调用
function factorial(n){
return n > 1 ? n * factorial(n-1) : 1;
}
factorial(5);//120
let arr = ['html', 'css', 'js', 'vue', 'angular', 'bootstrap']
要求输出结果为:
['js', 'css', 'vue', 'html', 'angular', 'bootstrap']
写出下面运行结果
var bar = 0;
var obj = {
bar: 1, foo: function() { console.log(this.bar); }
};
var obj2 = {
bar: 2, foo: obj.foo
};
var obj3 = {
bar: 3, foo: function() { return obj.foo; }
};
var tempFoo = obj2.foo;
obj.foo(); // 1
obj2.foo(); // 2
obj3.foo(); // 0
tempFoo(); // 0
js只有两种形式的做用域:全局做用域和函数做用域
es6 新增块级做用域
改变做用域方法:使用apply()方法:使用call()方法: 使用new关键字:
for (var i = 0; i < 10; i++) {
setTimeout(function() {
console.log(i);
});
}
// 输出十个10 同时
写一个方法实现对数组进行随机排序
var arr = [1,2,3,4,5,6,7,8,9,10];
arr.sort(function(){
return Math.random() - 0.5;
})
console.log(arr);
// 数组去重
[...new Set([2,"12",2,12,1,2,1,6,12,13,6])]
let 做用于
// 数组最大值
var arr = [ 1,5,1,7,5,9];
Math.max(...arr) // 9
写出下面程序的运行结果,并解释缘由
var a = 'aa';
function foo() {
alert(a); var b = 'bb'; alert(b);
}
test();
写出下面程序的运行结果,并解释缘由
function Foo() {
getName = function() { alert(1); } return this;
}
new Foo().getName();
不执行
['1', '2', '3'].map(parseInt)的结果为多少? 并解释缘由?若是修改为指望的结果?
["1", "2", "3"].map(parseInt);
// 你可能觉的会是[1, 2, 3]
// 但实际的结果是 [1, NaN, NaN]
// 一般使用parseInt时,只须要传递一个参数.
// 但实际上,parseInt能够有两个参数.第二个参数是进制数.
// 能够经过语句"alert(parseInt.length)===2"来验证.
// map方法在调用callback函数时,会给它传递三个参数:当前正在遍历的元素, 元素索引, 原数组自己.
// 第三个参数parseInt会忽视, 但第二个参数不会,也就是说,
// parseInt把传过来的索引值当成进制数来使用.从而返回了NaN.
function returnInt(element) {
return parseInt(element, 10);
}
['1', '2', '3'].map(returnInt); // [1, 2, 3]
// 意料之中的结果
// 也可使用简单的箭头函数,结果同上
['1', '2', '3'].map(str => parseInt(str));
// 一个更简单的方式:
['1', '2', '3'].map(Number); // [1, 2, 3]
// 与`parseInt` 不一样,下面的结果会返回浮点数或指数:
['1.1', '2.2e2', '3e300'].map(Number); // [1.1, 220, 3e+300]
var str = "helloworld";
Object.assign()
定义:
apply:调用一个对象的一个方法,用另外一个对象替换当前对象。例如:B.apply(A, arguments);即A对象应用B对象的方法。
call:调用一个对象的一个方法,用另外一个对象替换当前对象。例如:B.call(A, args1,args2);即A对象调用B对象的方法。
共同之处:
都“能够用来代替另外一个对象调用一个方法,将一个函数的对象上下文从初始的上下文改变为由thisObj指定的新对象”。
不一样之处:
apply:最多只能有两个参数——新this对象和一个数组argArray。若是给该方法传递多个参数,则把参数都写进这个数组里面,固然,即便只有一个参数,也要写进数组里。若是argArray不是一个有效的数组或arguments对象,那么将致使一个TypeError。若是没有提供argArray和thisObj任何一个参数,那么Global对象将被用做thisObj,而且没法被传递任何参数。
call:它能够接受多个参数,第一个参数与apply同样,后面则是一串参数列表。这个方法主要用在js对象各方法相互调用的时候,使当前this实例指针保持一致,或者在特殊状况下须要改变this指针。若是没有提供thisObj参数,那么 Global 对象被用做thisObj。
实际上,apply和call的功能是同样的,只是传入的参数列表形式不一样。
var aLi = document.querySelectorAll('li');
3 console.log(aLi.constructor === Array) //false
4
5 aLi.__proto__ = Array.prototype;
6
7 console.log(aLi.constructor === Array) //true
区别1:link是XHTML标签,除了加载CSS外,还能够定义RSS等其余事务;@import属于CSS范畴,只能加载CSS。
区别2:link引用CSS时,在页面载入时同时加载;@import须要页面网页彻底载入之后加载。
区别3:link是XHTML标签,无兼容问题;@import是在CSS2.1提出的,低版本的浏览器不支持。
区别4:ink支持使用Javascript控制DOM去改变样式;而@import不支持。
伪类包含两种:状态伪类和结构性伪类。
CSS 伪类用于向某些选择器添加特殊的效果。
CSS 伪元素用于将特殊的效果添加到某些选择器。
border-radius
text-decoration none
beforeCreate
created
beforeMount
mounted
beforeUpdate
updated
beforeDestroy
destroyed