Javascript杂记
eval()
参数是一个字符串,eval会将传入的字符串当作代码来执行。使用Function函数依然可以做到这点,setTimeout,setInterval也可以。尽量不要使用这些,两个set...函数要用也要使用函数实行,不要使用字符串。严格模式下不能使用eval来创建变量和函数,非严格模式下可以
eval(“alert(‘Hi!’)”); var myfunc = new Function(“alert(‘Hi!’)”);
原始包装类型
Number,Boolean,String.使原始值具有对象般的行为。
var name = "dfdsfdsfds"; console.log(name.toUpperCase()); //在这句语句表象的背后js引擎创建了String类型的实例,紧跟着就销毁。 var name = "dfdsfdsfds"; name.author = true; console.log(name.author);//在console语句时,对象实例已经销毁。
原始值本身不具备对象特性,例如:
1.toString() // undefined;
Var a = 1; a.toString();
for……in
用来遍历对象属性,同样还会遍历从原型继承来的属性,所以遍历自定义对象时,使用hasOwnPrpperty()方法来为for……in循环过滤出实例属性。
var prop; for(prop in object){ If( object.hasOwnProperty(prop)){ Console.log(“Property name is ” + prop); Console.log(“Property value is ” + object[prop]); } }
typeof
Js中5种原始类型分别是 字符串、数字、布尔值、null、undefined.
typeof运算符之后返回 “string”,”number”,”boolean”,”undefined”,”objet”.
判断null是使用!== 或者 ===,避免用typeof来检测null,因为会返回object.
instanceof
js中除了原始值都是引用值,js中内置的引用类型:Object、Array、Date、Error. typeof都会返回object,所以分清楚这几种类型,需要使用instanceof.
If(value instanceof Date/RegExp..),因为每个对象都是继承自Object,所以任何类型都会返回true。
检测自定义类型时也使用instanceof.
In
判断对象属性是否存在时使用in,联想for……in……。
Console.info(‘propertyName’ in objectName).
不要用obj[key],这样取得的是属性值,即使判断它是否等于null,也不能判断它是否有个属性值等于null.
数组检测
Sample Code:
function isArray(value) { if(typeof Array.isArray === "function") { return Array.isArray(value); }else { return Object.prototype.toString.call(value) === "[Object Array]"; } }
The main difference between apply and call:
‘Apply’ lets you invoke the function with arguments as an array;
‘Call’ requires the parameters be listed explicity.
Sample Code:
function theFunction(name, profession) { alert("My name is " + name + " and I am a " + profession + "."); } theFunction("John", "fireman"); theFunction.apply(undefined, ["Susan", "school teacher"]); theFunction.call(undefined, "Claude", "mathematician");