function testFunction() { this.clearLocalStorage(); this.timer = setTimeout(function() { this.clearBoard(); // what is "this"? }, 0); };
运转上面的代码会涌现"Uncaught TypeError: undefined is not a function."报错。缘由是当你试图挪用setTimeout()要领时,你现实上在挪用window.setTimeout()要领。因而,一个匿名的函数传入到setTimeout()要领中,该函数的高低文现实上是window对象,而window对象没有clearBoard()要领。
一个传统的,浏览器兼容的计划是将援用this存储到一个变量中,该援用可以被闭包继续,以下:
function testFunction () { this.clearLocalStorage(); var self = this; // save reference to 'this', while it's still this! this.timer = setTimeout(function(){ self.clearBoard(); }, 0); };
在新版本的浏览器中,你可以运用bind()要领来通报援用:
function testFunction () { this.clearLocalStorage(); this.timer = setTimeout(this.reset.bind(this), 0); // bind to 'this' }; function reset(){ this.clearBoard(); //back in the context of the right 'this'! };
var a = new Array(4294967295); //OK var b = new Array(-1); //range error var num = 2.555555; document.writeln(num.toExponential(4)); //OK document.writeln(num.toExponential(-2)); //range error! num = 2.9999; document.writeln(num.toFixed(2)); //OK document.writeln(num.toFixed(25)); //range error! num = 2.3456; document.writeln(num.toPrecision(1)); //OK document.writeln(num.toPrecision(22)); //range error!
var testArray = ["Test"]; /* Precondition: defined testArray outside of a function */ function testFunction(/* No params */) { for (var i = 0; i console.log(testArray[i]); } } testFunction();
向要领传入声明的参数
var testArray = ["Test"]; function testFunction(testArray) { for (var i = 0; i console.log(testArray[i]); } } testFunction(testArray);
9. Uncaught TypeError: Cannot Set Property
当我们试图接见一个undefined的变量时,一般会返回undefined,而我们不能猎取或是设置undefined的属性。这时刻,运用就会抛出“Uncaught TypeError cannot set property of undefined.”报错。
假如test对象不存在,也会抛出“Uncaught TypeError cannot set property of undefined.”。