数据类型检测
//接收任意数量的参数并将其转换为数组的函数
function makeArray(){
//临时的数组容器
var arr = [];
for(var i= 0;i<arguments.length;i++){
arr.push(arguments[i]);
}
return arr;
}
//用这一特性可以显示错误信息和默认信息
function displayerror (msg){
if(typeof msg == "undefined"){
msg = "An error occurred;";
}
alert(msg);
}
//js数据类型检测
function istypeof(a){
if(typeof a === "number"){
return a+" is number";
}
if( typeof a === "string"){
return a+ " is string";
}
if(typeof a === "boolean"){
return a+ " is boolean";
}
if(typeof a === "function"){
return a + "is function";
}
if(a.constructor === Array){
return a+ " is Array";
}
if(a.constructor === Object){
return a + " is Object";
}
}
var arr = [ ],obj={};
因为typeof arr === "object"; typeof obj === "object";
所以可以用constructor来检测
属性标签和属性检测
属性检测
Object.defineProperty()自定义的方法
Object.defineProperty( car, "price", { enumerable:false, value:1000 } );
//为car对象设置price属性 , car.price=1000;
//第一个参数是要添加属性的对象;
//第二个参数设计要添加的属性;
//第三个参数是一个对象(设置一些标签);
//enumerable :false ;表示不可枚举,即不能沿原型链向上被for in循环到;
//value:1000,即price属性的值为1000;
1,如果是用字面量和new创建的对象属性,默认他的enumerable 和 writable和configurable都是为true的;即可以写,可以删除,可以配置;
2,如果是用Object.defineProperty();不做声明的话,
默认创建的对象的属性它的:enumerable和writable和configurable标签都是为false;configuarable:true;则delete第可以删除的;
geter 和seter 方法
function Dog ( ) { }
Object.defineProperty( Dog.prototype, "name", {
get: function ( ) { return "大黄";}
})
var dog = new Dog();
dog.name;//大黄
也可以这样编写
function Dog ( ){ }
Dog.prototype={
name :function (){
return "大黄";
}
var dog =new Dog()
dog,name();//大黄
}
属性标签value,writable ,enumerable ,configurable;
Object.getOwnPropertyDescriptor()获取对象属性标签的状态
Object.getOwnPropertyDescriptor({name:"MGT360124"},"name");
//Object{value:true,writable:true,enumable:true,configurable:true}
writable:true则属性的值表示可修改
enumerable:true表示属性的值可遍历,用for in 遍历则会遍历对象原型的值,可以用Obj.hasOwnProperty(key)过滤;
configurable :true表示属性的值可删除
Object.defineProperties()为对象添加定义多个属性和属性标签
var person = {};
Object.defineProperties( person, {
name: { value: "MGT360124", writable: false },
age: { value: 18, enumerable: false },
city: {value : "beijing", configurable : true,enumerable: true,writable: true},
getLuck : { get : function ( ) { return Math.random() ; } },
setCity : { set : function (city) { this.city = city + "--中国" ;} },
});
person.city ;
person.setCity = "南昌";
person.city;//南昌--中国;
用for in 遍历则会遍历对象原型的值,可以用Obj.hasOwnProperty(key)过滤;阻止for in循环沿原型链向上查找
function Dog () {
name = "大黄";
}
Dog.prototype = {
color : "yellow",
getColor: function () { return this.name;}
}
var dog = new Dog();
dog.name = "2哈";
for ( var key in dog ) {
if ( dog.hasOwnProperty(key) ) {
console.log( dog[key] ) ;//"2哈"
}
}