JS学习十三天----子集和扩展

子集和扩展

子集的定义大部分是出于安全考虑,只有使用这门语言的一个安全的子集编写脚本,才能让代码执行的更安全,更稳定,比如如何更安全的执行一段由不可信第三方提供的广告代码.

为了让JS代码静态的通过安全检查,必须移除一些JS特性:

1.eval()和Function()否早函数在任何安全子集里都是禁止使用的,因为他们可以执行任意代码,而且JS无法对这些代码做静态分析.

2.进制使用this关键字,因为函数(在非严格模式中)可以通过this访问全局对象.而沙箱系统的一个重要目的就是阻止对全局对象的访问.

3.禁止使用with语句,因为with语句增加了静态代码检查的难度.

4.禁止使用某些全局变量.在客户端JS中,浏览器窗口对象可以当做全局对象,但也具有双重身份,因此代码中不能有对window对性的引用.同样的,客户端document对象定义了可以用来操控整个页面内容的方法.将对document的控制权交给一段不受信任的代码会有很多隐患.安全子集提供了两种不同的方法来处理类似document这类全局对象.第一种方法是,沙箱完全禁掉他们,并定义一组自定义API用以对分配给它的web页面做有限制的访问.第二种方法,在沙箱代码所运行的”容器”内定义一个只对外提供安全的标准DOM API的”外观面板”或”document代理对象”

5.禁止使用某些属性和方法,以免在沙箱中的代码拥有过多的权限.这些属性和方法包括arguments对象的两个属性caller和callee,函数call()和apply(),,以及constructor和prototype两个属性.非标准的属性也被禁止了,比如_proto_,一些自己将这些不安全的属性和全局对象列进了黑名单,还有一些子集提供了白名单,给出了推荐使用的安全的属性和方法.

6.静态分析可以有效地防止带有点(.)运算符的属性存取表达式去读写特殊属性.但是使用方括号[]来访问属性则与此不同,因为我们无法对方括号内的字符串表达式做静态分析.基于这个原因,安全子集通常禁止使用方括号,除非方括号内是一个数字或者字符串直接量.安全子集将[]替换为全局函数,通过调用全局函数来查询和设置对象抽象,这些函数会执行运行时检查以确保它们不会读写那些禁止访问的属性.

安全子集:ADsafe,,dojox.secure,Caja,FBJS,Microsoft Web Sandbox,const pi =3,14;//定义一个常量并且赋值

关键字let有四种使用方式:

1.可以作为变量声明,和var一样

2.在for/in循环中,作为var的替代方案

3.在语句块中丁一一个新变量并显式指定它的作用域

4.定义一个在表达式内部作用域中的变量,这个变量旨在表达是内可用.

JSd扩展:结构赋值,迭代器,生成器yield,数组推到,函数简写,多catch从句.

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

时间: 2024-08-15 01:53:13

JS学习十三天----子集和扩展的相关文章

JS学习笔记-BOM之window

BOM:BrowserObjectModel,浏览器对象模型,提供JS中对浏览器的各种操作的对象,是JS应用中唯一没有相关标准的部分,这事BOM经常出现问题的所在,主要用于处理浏览器窗口与框架,浏览器特有的JS扩展也被默认为BOM的一部分,而各浏览器之间的公有对象就成了默认的标准.本篇文章将主要介绍window对象. 属性 世界上本没有模型,用的多了也就成了模型.模型便是一个可供参考的东西,BOM中的一系列通用的对象便构成了这个模型,其结构可展示为: window的六大属性,同时它们也是对象:

区域及分离、Js压缩、css、jquery扩展

后台管理区域及分离.Js压缩.css.jquery扩展 本系列目录:ASP.NET MVC4入门到精通系列目录汇总 有好一段时间没更新博文了,最近在忙两件事:1.看书,学习中...2.为公司年会节目做准备,由于许久没有练习双截棍了,难免生疏,所以现在临时抱佛脚.深圳最近的天气反常,许多人感冒了,我也成为其中之一,大家注意身体... 这一篇,我来简单的讲一下接下来项目中会用到的一些杂七杂八的技术. 区域及分离 在15.ASP.NET MVC入门到精通——MVC-路由中,我已经简要说明了区域的分离.

[Pro Angular.JS]学习笔记1.1:设置开发环境

可以使用yeoman.io,很方便.我已经写了一篇随笔,介绍如何使用.这里也有一篇介绍的文章:http://www.cnblogs.com/JoannaQ/p/3756281.html 代码编辑器,在Mac下用了一下WebStorm,太恶心了.另外发现书的作者使用的开发环境是Windows + VS Express 2013,为了方便学习,我也使用VS Express 2013 Update2.VS2013用起来蛮舒服的,把WebStorm比得跟驼屎一样.也许是因为我没用习惯吧. 1.安装Nod

【转】Backbone.js学习笔记(二)细说MVC

文章转自: http://segmentfault.com/a/1190000002666658 对于初学backbone.js的同学可以先参考我这篇文章:Backbone.js学习笔记(一) Backbone源码结构 1: (function() { 2: Backbone.Events // 自定义事件 3: Backbone.Model // 模型构造函数和原型扩展 4: Backbone.Collection // 集合构造函数和原型扩展 5: Backbone.Router // 路由

Ext JS学习第二天 我们所熟悉的javascript(一)

此文用来记录学习笔记: •ExtJS是一个强大的javascript框架,如果想真正的掌握ExtJS,那么我们必须要对javascript有一定的认识,所以很有必要静下心来,抱着一本javascript书籍,恶补一番.推荐书籍<javascript高级程序设计>.<javascript设计模式>. •在这里我们学习一下可能你从未接触过的javascript,这些javascript知识是我们要学好ExtJS这个框架非常有必要的.必备的知识.我们需要掌握的内容有: –javascri

Node.js 学习一

Node.js是一个可以让javascript运行在服务器端的平台.node.js是一个为实时web应用开发而诞生的平台,它考虑到了实时响应/超大规模数据要求下架构的可扩展性.它采用了单线程,异步石IO,事件驱动式的设计模式. Node.js有着强大而灵活的包管理器(node package manager)npm node.js 架构设计:1,异步式I/O,事件驱动 2,V8引擎作为javascript引擎 3,高效的libev事件驱动库 4,高效的libeio异步I/O库 CommonJS:

js学习笔记知识点

AJAX用法安全限制JSONPCORS面向对象编程创建对象构造函数原型继承class继承 AJAX 用法 AJAX不是JavaScript的规范,它只是一个哥们"发明"的缩写:Asynchronous JavaScript and XML,意思就是用JavaScript执行异步网络请求 在现代浏览器上写AJAX主要依靠XMLHttpRequest对象: 'use strict'; function success(text) { var textarea = document.getE

JS学习笔记-JSON

JSON(JavaScriptObject Notation)-JS对象表示法,是JavaScript的一个严格子集,它是一种开发式和基于文本的数据交换格式,因此JSON并不是JS独有,其他很多语言也可以对JSON进行解析和序列化. 特点: 1.轻量级-易于阅读和编写,同时易于及其解析和生成 2.可表示类型: (1)简单值:字符串.数值.布尔值.null,不支持特殊值JS中的undefined (2)对象 { "user" : "Admin", "age&

程序猿的快速学习法——以JS学习为例,进行图解

最近一直在忙着学习,感觉做总结的时间太少了,听起来挺好玩儿的,就像<倾城之恋>里面,范柳原说:那时候都忙着谈恋爱了哪里有时间恋爱.  学习和总结也是一样,不能一直忙着学习而导致自己没有时间总结,这才是最得不偿失的事情. 最近比较高强度的学习,让我不得不从整体上反思下了,首先,来看张比较概括的图: 上面的大图大概就包含了我们在学习一个新东西的时候,从学习和实践方法要了解那些东西. 首先,在学习上,刚开始的时候,先从宏观上了解一下,然后就开始了微观上内容的学习. 拿学习JS来说, 刚开始的时候,在