Numbers
a = 0.1;
b = 0.2;
c = 0.3;
(a + b) + c === a + (b + c) //false
请说出下面运算式的结果
5 / 5
5 / "5"
5 / "5a"
5 / "NaN"
parseInt("08") === 0 // ie 8
如何处理这种情况
Array
删除数组中的第二项
var arr = ['a','b','c','d'];
arr ==> ['a','c', 'd']
delete arr[1] // 为什么这样用是错误的
arr.splice(1,1) //正确方法
如何检测 一个对象是不是数组呢
var arr = ['a','b']
typeof arr === 'object',
typeof null === 'object'
$.type(arr) //jQuery
Array.isArray(arr) //es5
Object.prototype.toString.call(arr) === '[object Array]'; //es3
Boolean
!!会把一个对象变成布尔值
!!false
!!null
!!undefined
!!""
!!0
!!NaN
//上面的都是 false
!!"0" //true
!!"false" //true
!!{} //true
//实际使用情况
function myfunc(config){
if(config){
...
}
}
arguments 对象
//解释一下 arguments 对象 (存在于function中的)
//是一个 类似 数组的对象, 没有slice splice 等方法
arguments.length //有length属性
调用function的四种形式
func() //直接调用
new func() //实例化
myfunc.func() //类似方法的调用
func.apply(this,'1') //用 apply或者 call指定 this调用
闭包
IIFE
//IIFE = Immediately-Invoked Function Expression.
//写一个 IIFE
// good
var task = (function () {
// Code
return result;
})();
var task = (function(){
//Code
return result;
}())
//上面两种都是可以的
//一个闭包的例子
define(function(require,exports,module){
var token = '12345';
module.exports = {
checkToken: function(tkNew){
return tkNew === token;
}
}
}) //定义一个私有变量token,检测 token是否合法,seajs
prorotype原形继承
var Vm= function(id){
this. id = id;
}
Vm.prototype.getGame = function(){
return $.ajax ...
}
//写一个Vm1 继承Vm
var Vm1 = function(id,name){
this.name = name;
}
Vm1.prototype = new Vm('123');
//或者
var Vm1 = function(id,name){
this.name = name;
}
Vm1.prototype = Object.create(Vm);
请写出一个函数 可以这样执行:calc(3)(2) //计算结果是5
var calc = function (a){
return function(b){
return a + b;
}
}
请写出一个函数 可以这样执行:assertPlus(3,2)(5) //(如果 3+2 === 5 ,返回 true,否则返回 false)
function assertPlus(a ,b){
return function(c){
return c === a + b;
}
}