javascript运行环境

js如果只在引擎中运行,它会严格遵循并且可以预测的,但是js几乎都在宿主环境中运行,浏览器或者Node环境

ECMAScript中的Annex B

介绍了浏览器兼容性问题导致与官方规范的差异

• 在非严格模式中允许八进制数值常量存在,如0123(即十进制的83)。
• window.escape(..) 和window.unescape(..) 让你能够转义(escape)和回转(unescape)
带有% 分隔符的十六进制字符串。例如,window.escape( "? foo=97%&bar=3%" ) 的结果
为"%3Ffoo%3D97%25%26bar%3D3%25"。
• String.prototype.substr 和String.prototype.substring 十分相似,除了前者的第二个
参数是结束位置索引(非自包含),后者的第二个参数是长度(需要包含的字符数)。
Web ECMAScript规范,介绍官方ECMAScript和目前浏览器中JavaScript实现的差异
<!-- 和--> 是合法的单行注释分隔符。
• String.prototype 中返回HTML 格式字符串的附加方法:anchor(..)、big(..)、
blink(..)、bold(..)、fixed(..)、fontcolor(..)、fontsize(..)、italics(..)、
link(..)、small(..)、strike(..) 和sub(..)。
以上内容在实际开发中很少使用,也不推荐,我们更倾向于使用其他的内建
DOM API 和自定义工具集。
• RegExp 扩展:RegExp.$1 .. RegExp.$9(匹配组) 和RegExp.lastMatch/RegExp["$&"](最
近匹配)。
• Function.prototype 附加方法:Function.prototype.arguments(别名为arguments 对象)
和Function.caller(别名为arguments.caller)。
宿主对象 由宿主对象创建并提供给js引擎的变量,包括内建对象和函数

常见的宿主对象,如下例子

var a = document.createElement( "div" );
typeof a; // "object"--正如所料
Object.prototype.toString.call( a ); // "[object HTMLDivElement]"
a.tagName; // "DIV"

需要注意宿主对象的行为差异

• 无法访问正常的object 内建方法,如toString();
• 无法写覆盖;
• 包含一些预定义的只读属性;
• 包含无法将this 重载为其他对象的方法;
全局DOM变量

一个不太为人所知的事实是:由于浏览器演进的历史遗留问题,在创建带有id 属性

的DOM 元素时也会创建同名的全局变量

<div id="foo"></div>
if (typeof foo == "undefined") {
oo = 42; // 永远也不会运行
}
console.log( foo ); // HTML元素

当页面出现多个id同名时,我们可以直接使用该全局变量来获取同id的HTMLCollection

故意设置两个id同名,当然编码时不推荐,简易保持唯一

使用id作为变量名来获取同名DOM

原生原型

不要扩展原生原型,因为随着规范发展,扩展的功能可能会被实现,使得扩展和规范冲突

必要的扩展建议作如下处理

if (!Array.prototype.push) {
// Netscape 4没有Array.push
Array.prototype.push = function(item){
this[this.length-1] = item;
};
}
shim/polyfill

polyfill 能有效地为不符合最新规范的老版本浏览器填补缺失的功能,让你能够通过可靠的代码来支持所有你想要支持的运行环境,shim/polyfill能够填充新的API,但是没法填充新的语法,我们可以使用bable来将新的语法转换成旧的语法

保留字

宿主环境实现的限制

下面列出一些已知的限制:

• 字符串常量中允许的最大字符数(并非只是针对字符串值);
• 可以作为参数传递到函数中的数据大小(也称为栈大小,以字节为单位);
• 函数声明中的参数个数;
• 未经优化的调用栈(例如递归)的最大层数,即函数调用链的最大长度;
• JavaScript 程序以阻塞方式在浏览器中运行的最长时间(秒);
• 变量名的最大长度。

深入js系列-环境的更多相关文章

  1. node.js系列笔记之node.js初识《一》

    node.js系列笔记之node.js初识<一> 一:环境说明 1.1 Linux系统CentOS 5.8 1.2 nodejs v0.10.15 1.3 nodejs源码下载地址 htt ...

  2. Node.js系列-http

    前言: 最近一直忙着公司项目的事,战友们的留言也没空回复,博客也有段时间没有更新了,年底了就是一个的忙啊~~~(ps:同感的也给个赞吧) 现在前端的就是一直地更新一直有新的东西出来,什么ES2015, ...

  3. Node.js系列-express(上)

    前言 Node.js系列的第一篇:http,大概描述了通过使用node.js内置的api创建一个服务并监听request实现简单的增删改查.现在,我们就通过通读express官网及使用express框 ...

  4. Nodejs学习笔记(一)—简介及安装Node.js开发环境

    一.简介 Node.js是让Javascript脱离浏览器运行在服务器的一个平台,不是语言: Node.js采用的Javascript引擎是来自Google Chrome的V8:运行在浏览器外不用考虑 ...

  5. Node.js系列——(4)优势及场景

    背景 之前几篇系列文章简单介绍了node.js的安装配置及基本操作: Node.js系列--(1)安装配置与基本使用 Node.js系列--(2)发起get/post请求 Node.js系列--(3) ...

  6. Linux虚拟机中 Node.js 开发环境搭建

    Node.js 开发环境搭建: 1.下载CentOS镜像文件和VMWare虚拟机程序; 2.安装VMWare——>添加虚拟机——>选择CentOS镜像文件即可默认安装带有桌面的Linux虚 ...

  7. atitit.js浏览器环境下的全局异常捕获

    atitit.js浏览器环境下的全局异常捕获 window.onerror = function(errorMessage, scriptURI, lineNumber) { var s= JSON. ...

  8. Nodejs学习笔记(一)--- 简介及安装Node.js开发环境

    目录 学习资料 简介 安装Node.js npm简介 开发工具 Sublime Node.js开发环境配置 扩展:安装多版本管理器 学习资料 1.深入浅出Node.js http://www.info ...

  9. Ember.js系列文章

    JS前端框架之Ember.js系列文章 本文为文章索引,主要是罗列Ember.js的相关文章便于阅读. 相关演示代码:github for free. 基础篇 1. EmberJs之What|Why| ...

随机推荐

  1. mysql插入数据频繁出现坏表

    测试环境mysql出现了一个怪表:select查询表卡死,alter修改表卡死,甚至我不想要这个表了,delete.truncate.drop表都卡死卡主了...... 解决办法: >show ...

  2. Cookie,Session,Token and Oauth

    Cookie 服务器端生成,发送给客户端,保存用户信息.下一次请求同一网站时会把该cookie发送给服务器. 应用:登录表单自动填充,同样 随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等 ...

  3. ReentrantReadWriteLock可重入,锁升级,锁降级

    public class ReentrantReadWriteLockTest { public static void main(String[] args) throws InterruptedE ...

  4. Mysql load data infile 命令格式

    [1]Linux系统环境下 LOAD DATA INFILE /usr/LOCAL/lib/ubcsrvd/datacsv/201909_source.csv INTO TABLE np_cdr_20 ...

  5. golang学习笔记---string && strconv

    1.字符串的组成?Golang的字符串都是由单个字节连接起来的,每个字节都是UTF8编码标识的Unicode文本.(不需要在考虑中文不兼容问题) 2.如何遍历字符串?先看一个例子: package m ...

  6. c# 合并两个DataTable

    当两个DataTable 结构相同可以用自带方法(Merge)合并 // // 摘要: // 将指定的 System.Data.DataTable 与当前的 DataTable 合并,指示是否在当前的 ...

  7. ORA-03113: 通信通道的文件结束解决方法一例

    开发项目时,使用的是Oracle数据库.最近遇到了“ORA-03113: 通信通道的文件结束”错误.如下图所示: 经过网上查资料和请教同事,终于找到了解决ORA-03113错误的办法. 解决步骤如下: ...

  8. 北理工机器人队RM视觉组学习参考汇总(持续更新中)

    欢迎大家有意加入北理工机器人队参与到视觉组的工作中.在大家能够正式作为队员参与到视觉组的准备工作之前,北理机器人队需要对各位进行培训.这篇文章主要面向有志于参加机器人队视觉组的同学.同时,欢迎所有对相 ...

  9. 把JSON数据格式转换为Python的类对象

    JOSN字符串转换为自定义类实例对象 有时候我们有这种需求就是把一个JSON字符串转换为一个具体的Python类的实例,比如你接收到这样一个JSON字符串如下: {"Name": ...

  10. 写给自己的 SOA 和 RPC 理解

    1.SOA SOA(Service-Oriented Architecture)面向服务架构,将应用程序不同功能单元(称为服务)进行拆分,并通过这些服务之间定义良好的接口和契约联系起来. SOA 不是 ...