zoukankan      html  css  js  c++  java
  • Javascript use strict模式和对象

    use strict 

    只能出现在脚本代码的开始或者函数体的开始、任何实体语句之前。Javascript的具体实现将它们解析为解释器自有的指令。这个指令的目的是说明后续的代码将会解析为严格代码。

    ECMAScript 5中的严格模式是该语言的一个受限子集,修正了语言的重要缺陷,并提供健壮的差错功能和增强的安全机制。

    声明对象

    对象直接量

    	var book={
    		"main title":"Javascript",				//属性名有空格,必须用字符串表示
    		"sub-title":"The Definitive Guide",		//属性名有 -  必须用字符串表示
    		"for":"all ",							//属性名有关键字 ,必须用字符串表示
    		anthor:{
    			firstname:"David",
    			surname:"Flanagan"			
    		}
    	}
    new 对象

    原型

    每一个Javascript对象(null除外)都和另一个对象关联。这儿的另一个对象就是原型,每一个对象都从原型继承属性。所有通过对象直接量创建的对象都具有相同的原型对象,并可以通过Object.prototype获取原型对象的引用。通过关键字new 和构造函数调用创建的对象的原型就是构造函数的prototype属性的值。

    Object.create()的方法,创建一个对象,其中第一参数是这个对象的原型,第二个可选参数用来对对象的属性进行进一步的描述。

    删除属性 delete

    检测属性 

    in运算符,hasOwnProperty()和propertyIsEnumerable()方法来检测属性

    	print("main title" in book);
    	print("anthor" in book);					// in 检测是否是对象的属性 返回true
    	print(book.hasOwnProperty("main title"));	//hasOwnProperty()方法用来检测给定名字是否是对象的自有属性
    	print(book.hasOwnProperty("author"));		//返回false
    	print(book.propertyIsEnumerable("author"));	//返回false 只有检测到自有属性,且这个属性的可枚举性是true时,返回true。
    	print("fadaf" in book);
    	print(book["main title"]!== undefined);	
    	print("publishtime" in book);	

    <span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">in 可以区分不存在的属性和存在但值为undefined的属性。</span>

    存储器属性getter和setter

    每一个对象都有与之相关的原型、类和可扩展性。

    对象的原型属性是用来继承属性的。原型属性时在对象创建之初就设置好的。通过 new 创建的对象使用构造函数的prototype属性作为它们的原型。通过Object.create()创建的对象使用第一个参数作为它们的原型。

    	var p=Object.create(point);				//通过原型的方式创建新的对象
    	print(p);
    	print(p.isPrototypeOf(point));
    	print(point.isPrototypeOf(p));			//返回 true 。point 是 p的原型
    	print(Object.prototype.isPrototypeOf(p));	// Object 是 p的原型

    对象的类属性是字符串,用来描述对象的类型信息。

    function classOf(o){						//返回任意对象的类
    		if(o===null) return "NULL";
    		if(o===undefined) return "Undefined";
    		return Object.prototype.toString.call(o).slice(8, -1);// 正数第八个到倒数第二个之间的字符
    	}
    

    对象的可扩展性用以表示可以给对象添加新的属性,所有内置对象和自定义对象都是显示可扩展的,宿主对象的可扩展性是由Javascript引擎定义的。

    	Object.preventExtensions(p);				//将对象转换为不可扩展的
    	print(Object.isExtensible(p));				// 判断对象是否是可扩展的
    一旦将对象转换为不可扩展的就无法将其转换回去。preventExtensions只影响到对象本身的可扩展性。如果给一个不可扩展的对象的原型添加属性,这个不可扩展的对象同样会继承这些新的属性。

    Object.seal()除了将对象设置为不可扩展之外,还可以将对象的所有自有属性都设置为不可配置的,不能添加、删除、修改,不过已有的可写属性依然可以修改。对以已经封闭的对象是不能解封的,可以使用Object.isSealed()来检测对象是否封闭。

    Object.freeze()将更严格的锁定对象----“冻结”,将所有的数据属性都设置为只读,存储器属性将不受影响。使用Object.isFrozen()来检测对象是否冻结。

    序列化对象

    序列化对象是指对象的状态转换为字符串,也可将字符串还原为对象。Javascript提供来内置函数JSON.stringify()和JSON.parse()用来序列化和还原Javascript对象。

    	a={x:1,y:{z:[false,null,""]}};
    	s=JSON.stringify(a);						//
    	print(s);
    	m=JSON.parse(s);							// m 是 s 的深拷贝
    	print(m);






    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    SQL Server 全文搜索 配置、查询初体验
    SQL Server 触发器
    SQL Server 锁
    SQL Server 事务语法
    SQL Server 表变量和临时表的区别
    SQL Server系统存储过程
    SQL 语句转换格式函数Cast、Convert
    SQL Server 系统视图
    T-SQL 批处理
    SQL Server 分区表
  • 原文地址:https://www.cnblogs.com/andy-2014/p/4964238.html
Copyright © 2011-2022 走看看