1.數(shù)字
isNaN(number)判斷是否是數(shù)字
Math.floor(number) 方法把一個(gè)數(shù)字轉(zhuǎn)換成整數(shù)
2.for in屬性判斷
判斷屬性是來(lái)自原型鏈還是該對(duì)象的成員
for (myvar in obj){
if(obj.hasOwnProperty(myvar)){
}
}
3.內(nèi)置的值
true袖订、false、null吼和、undefined缺虐、NaN和Infinity
console.log(Infinity ); /* Infinity */
console.log(Infinity + 1 ); /* Infinity */
console.log(Math.pow(10,1000)); /* Infinity */
console.log(Math.log(0) ); /* -Infinity */
console.log(1 / Infinity ); /* 0 */
4.typeof
typeof 產(chǎn)生的值有number船庇、string灰署、boolean腺怯、undefined泳赋、function和object.
如果運(yùn)算數(shù)是一個(gè)數(shù)組或者null則結(jié)果是object
5.&&和||
如果第一個(gè)運(yùn)算數(shù)的值為假,那么運(yùn)算符&&產(chǎn)生它的第一個(gè)運(yùn)算數(shù)的值汇跨,否則產(chǎn)生第2個(gè)運(yùn)算數(shù)的值务荆。
如果第一個(gè)運(yùn)算數(shù)的值為真,那么運(yùn)算符||產(chǎn)生第1個(gè)運(yùn)算數(shù)的值穷遂,否則產(chǎn)生第2個(gè)運(yùn)算數(shù)的值函匕。
6.對(duì)象屬性
不賦值默認(rèn)為undefined
stooge["middle-name"] //undefined
我們可以用||運(yùn)算符來(lái)填充默認(rèn)值
var middle =stooge["middle-name"] || "none"
var status = flight.status || "unknow"
7.delete another_stooge.nickname
不會(huì)刪除原型中的屬性
8.減少全局變量的污染
創(chuàng)建唯一的全局變量
var MYAPP = {};
MYAPP.stooge={ }
9.函數(shù)原型
函數(shù)對(duì)象連接到Function.prototype
該原型對(duì)象連接到Object.prototype
函數(shù)原型擁有一個(gè)constructor屬性且值即為該函數(shù)的對(duì)象
10.函數(shù)調(diào)用
javascript共有四種調(diào)用模式
(1)方法調(diào)用模式
var myObject= {
value: 0;
increment: function (inc) {
this.value += typeof inc === 'number' ? inc : 1;
}
}
this訪(fǎng)問(wèn)自己所屬的對(duì)象
(2)函數(shù)調(diào)用模式
myObject.double=function () {
var that=this;
var helper=function () {
that.value=add(that.value,that.value);
}
}
如上函數(shù)調(diào)用模式this綁定到全局對(duì)象,如果要訪(fǎng)問(wèn)外部函數(shù)中的屬性蚪黑,那就用that方式
(3)構(gòu)造器調(diào)用模式
如果在一個(gè)函數(shù)前面帶上new 來(lái)調(diào)用盅惜,那么背地里將會(huì)創(chuàng)建一個(gè)連接到該函數(shù)的prototype成員的新對(duì)象,同時(shí)會(huì)this綁定到這個(gè)新對(duì)象上忌穿。
var Qua = function (string) {
this.status = string;
};
Qua.prototype.get_staus = function () {
return this.status;
}
var myQua = new Qua("confuse");
如果不用new 則訪(fǎng)問(wèn)不到對(duì)象屬性
(4) Apply調(diào)用模式
var array = [3,4];
var sum = add.apply(null ,array);
動(dòng)態(tài)綁定this對(duì)象
11.異常
var add = function (a, b) {
if (typeof a !== 'number' || typeof b !== 'number') {
throw {
name: 'typeError',
message: 'add needs numbers'
};
}
return a + b;
}
12.閉包的使用
//私有屬性的使用
var myObject = (function () {
var value = 0;
return {
increment: function (inc) {
value += typeof inc === 'number' ? inc : 1;
},
getValue: function () {
return value;
}
};
}());
//定義一個(gè)函數(shù) ,設(shè)置一個(gè)DOM節(jié)點(diǎn)為黃色抒寂,然后把它變成白色
var fade = function (node) {
var level = 1;
var step = function () {
var hex = level.toString(16);
node.style.backgroundColor = '#FFFF' + hex + hex;
if (level < 15) {
level += 1;
setTimeout(step, 100);
}
};
setTimeout(step,100);
}
13.模塊
模塊模式利用函數(shù)作用域和閉包來(lái)創(chuàng)建被綁定對(duì)象與私有化成員的關(guān)聯(lián)。
一般形式:一個(gè)定義了私有變量和函數(shù)的函數(shù)伴网;利用閉包創(chuàng)建可以訪(fǎng)問(wèn)私有化變量和函數(shù)的特權(quán)函數(shù);最后返回這個(gè)特權(quán)函數(shù)妆棒,或者把他們保存在一個(gè)可以訪(fǎng)問(wèn)的地方澡腾。
13.級(jí)聯(lián)
如果我們讓方法返回的是this對(duì)象而不是undefined,就可以啟用級(jí)聯(lián)
14.柯里化
Function.method('curry',function() {
//注意:arguments 并非一個(gè)真正的數(shù)組糕珊,所以沒(méi)有concat方法
var slice = Array.prototype.slice,
args = slice.apply(arguments),
that = this;
return function () {
return that.apply(null, args.concat(slice.apply(arguments)));
}
});
var add1 = add.crurry(1);
console.log(add1(2));
15.數(shù)組
數(shù)組繼承自Array.prototype
(1)長(zhǎng)度
myArray[1000] = true;
myArray.length //1001
如果手動(dòng)設(shè)置長(zhǎng)度动分,則數(shù)組會(huì)截取
numbers.length = 3;
(2)delete
不應(yīng)該用delete方法,應(yīng)該使用splice方法
delete numbers[2];
//返回 【'zero','one',undefined,'shi','go'】红选,會(huì)留下空洞
(3)數(shù)組不能用for in語(yǔ)句澜公,一個(gè)是會(huì)遍歷出原型鏈中的意外屬性,再者沒(méi)書(shū)序
(4)判斷是否為數(shù)組類(lèi)型
//缺點(diǎn),在識(shí)別不同窗口window或鎮(zhèn)frame里構(gòu)造的數(shù)組時(shí)會(huì)失敗
var is_array = function (value) {
return value && 'object' && value.constructor === Array;
}
var is_array = function (value) {
return Object.prototype.toString.apply(value) === '[object Array]';
}
(5)二維數(shù)組
//二維數(shù)組并指定初始值
Array.matrix = function (m, n, initial) {
var a, i, j, mat=[];
for (i = 0; i < m; i += 1) {
a = [];
for(j = 0; j < n; j+=1) {
a[j] = initial;
}
mat[i] = a;
}
return mat;
}
16.自動(dòng)插入分號(hào)
別這么寫(xiě),會(huì)自動(dòng)插入分號(hào)
return
{
status:true;
}
應(yīng)該這么寫(xiě)
return {
status:true;
}
17.檢測(cè)是對(duì)象或者數(shù)組
if(my_value && type of my_value === 'object' ) {
my_value是一個(gè)對(duì)象或者數(shù)組
}
18.parseInt坟乾,建議總加上10
parseInt(08) 會(huì)產(chǎn)生0
parseInt(08,10) 會(huì)產(chǎn)生8
19.浮點(diǎn)數(shù)
由于浮點(diǎn)數(shù)運(yùn)算不精確迹辐,如0.1+0.2 不等于0.3
所以解決方案是用轉(zhuǎn)化為整數(shù)計(jì)算,然后求值甚侣,除以倍數(shù)
20.isNaN 判斷是否為數(shù)字
判斷是否為數(shù)字明吩,isFinite會(huì)篩除掉NaN和Infinity。但是isFinite會(huì)試圖把它的運(yùn)算數(shù)轉(zhuǎn)換為數(shù)字殷费,如果不是一個(gè)數(shù)字印荔,它就不是一個(gè)好的測(cè)試。
var isNumber = function isNumber(value) {
return typeof value === 'number' && isFinite(value);
}
21.局部變量
(function () {
var hidden_variable;
}())
21.永遠(yuǎn)不要使用==和详羡!=
應(yīng)該直接使用 (foo 仍律!= 0) ,(foo)
(foo == 0) 实柠,(水泉!foo)