總結一些前端基礎的知識,有些知識可能在前端面試的時候會問到,因此作個記錄,也有助於其餘人查看,若是有什麼問題,能夠指出,會積極修正。javascript
console.log(typeof undefined); //undefined
console.log(typeof 123); //number
console.log(typeof '123'); //string
console.log(typeof true); //boolean
console.log(typeof [1,2,3]); //object
console.log(typeof {"id": 11}); //object
console.log(typeof null); //object
console.log(typeof console.log); //function
複製代碼
==
,什麼時候使用===
除了obj.a == null
之外,都用===
,==
要用的時候必定要是已經定義的
obj.a == null
轉換以後實際上是 obj.a == null || obj.a == undefined
html
Object
Array
Boolean
Number
String
Function
Date
RegExp
Error
複製代碼
區別:值類型改變一個不會影響其餘的,引用類型改變都改變,由於公用內存塊前端
JSON是JS的一個對象,也是一種數據格式,JSON中的兩個api以下java
JSON.parse()
JSON.stringify()
Object.prototype.toString
獲取一個對象的類型var toString = Object.prototype.toString;
toString.call(new Date); // [object Date]
toString.call(new String); // [object String]
toString.call(Math); // [object Math]
toString.call(/s/); // [object RegExp]
toString.call([]); // [object Array]
//Since JavaScript 1.8.5
toString.call(undefined); // [object Undefined]
toString.call(null); // [object Null]
複製代碼
arr instanceof Array
面試
instanceof判斷一個引用類型是什麼引用類型,是經過__proto__(隱式原型一層一層往上找,可否找到對應構造函數的prototype)ajax
function Element(ele) {
this.ele = document.getElementById(ele);
}
Element.prototype.html = function(val) {
var ele = this.ele;
if (val) {
ele.innerHTML = val;
return this;
} else {
return ele.innerHTML;
}
};
Element.prototype.on = function(type, fn) {
var ele = this.ele;
ele.addEventListener(type, fn);
return this;
}
var element = new Element('main');
element.html('hello').on('click', function() {
alert('handleClick');
});
複製代碼
function Foo(name) {
this.name = name;
// return this; // 自己會執行這一步
}
var f = new Foo('shiyanping');
複製代碼
如下兩種狀況會進行提高:api
var a = {
name: 'A',
fun: function() {
console.log(this.name);
}
};
a.fun(); //this === a
a.fun.call({ name: 'B' }); //this === { name: 'B' }
var fun1 = a.fun;
fun1(); //this === window
複製代碼
var i;
for (i = 0; i < 10; i++) {
(function(i) {
// 函數做用域
var a = document.createElement('a');
a.innerHTML = i + '<br>';
a.addEventListener('click', function(e) {
e.preventDefault();
alert(i);
});
document.body.appendChild(a);
})(i);
}
複製代碼
// 判斷一個數字是否出現過
function isFirst() {
var _list = [];
return function(id) {
if (_list.indexOf(id) >= 0) {
return false;
} else {
_list.push(id);
return true;
}
};
}
var first = isFirst();
first(10);
first(10);
first(20);
複製代碼
同步會阻塞代碼,可是異步不會 alert是同步 setTimeout是異步數組
console.log(1);
setTimeout(function() {
console.log(2);
}, 0);
console.log(3);
setTimeout(function() {
console.log(4);
}, 1000);
console.log(5);
// 輸出結果:1,3,5,2,4
複製代碼
須要等待的狀況下都須要異步,由於不會像同步同樣阻塞網絡
console.log(Date.now()); // 獲取當前毫秒數
var dt = new Date(); // 獲取當前時間
console.log(dt.getTime()); // 當前時間的毫秒數
console.log(dt.getFullYear()); // 年
console.log(dt.getMonth()+1); // 月(0-11)
console.log(dt.getDate()); // 日(0-31)
console.log(dt.getHours()); // 時(0-23)
console.log(dt.getMinutes()); // 分(0-59)
console.log(dt.getSeconds()); // 秒(0-59)
複製代碼
Math.random()
- 返回 0 ~ 1 之間的隨機數Math.abs(x)
- 返回數的絕對值Math.ceil(x)
- 向上取整Math.floor(x)
- 向下取整var arr = ['a', 'b', 'c', 'd'];
arr.forEach(function (item, index) {
console.log(item + ',' + index);
})
複製代碼
// map,生成新數組,不改變原來數組的格式
var arr = ['a', 'b', 'c', 'd'];
var result = arr.map(function (item, index) {
return index + '/' + item;
})
console.log(result);
複製代碼
// sort, 會改變原來數組
var arr = [1, 23, 3, 4];
var result = arr.sort(function (a, b) {
// 從小到大排序
return a - b;
// 從大到小排序
// return b - a;
})
console.log(result);
複製代碼
var arr = [1, 2, 3, 4];
var result = arr.filter(function (item, index) {
if (item < 3) {
return true
}
})
console.log(result);
複製代碼
var arr = [1, 2, 3, 4];
var result = arr.every(function (item, index) {
if (item < 3) {
return true
}
})
console.log(result); // false
複製代碼
var arr = [1, 2, 3, 4];
var result = arr.some(function (item, index) {
if (item < 3) {
return true
}
})
console.log(result); // true
複製代碼
var arr = [1, 2, 3, 4];
var result = arr.join(',');
console.log(result);
複製代碼
var arr = [1, 2, 3, 4];
var result = arr.reverse();
console.log(result);
複製代碼
var obj = {
x: 10,
y: 20,
z: 30
}
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
console.log(key + ':' + obj[key]);
}
}
複製代碼
function formatDate(dt) {
if (!dt) {
dt = new Date();
}
var year = dt.getFullYear();
var month = dt.getMonth() + 1;
var date = dt.getDate();
if (month < 10) {
month = '0' + month;
}
if (date < 10) {
date = '0' + date;
}
return year + '-' + month + '-' + date;
}
var nowDate = new Date();
var formatDate = formatDate(nowDate);
console.log(formatDate);
複製代碼
function randomStr(len) {
var random = Math.random();
random = random + '0000000000'; // 防止自動生成的數字不知足長度報錯而且強制轉換成字符串
return random.substr(0, len)
}
console.log(randomStr(20));
複製代碼
function forEach(obj, fn) {
if (obj instanceof Array) {
obj.forEach(function (item, index) {
fn(index, item);
})
} else {
for (var key in obj) {
if (obj.hasOwnProperty(key)) {
fn(key, obj[key]);
}
}
}
}
var arr = [1, 2, 3, 4];
forEach(arr, function (index, item) {
console.log(index + ',' + item);
});
var obj = {
x: 10,
y: 20
};
forEach(obj, function (index, item) {
console.log(index + ',' + item);
});
複製代碼