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. Flink task之间的数据交换

    Flink中的数据交换是围绕着下面的原则设计的: 1.数据交换的控制流(即,为了启动交换而传递的消息)是由接收者发起的,就像原始的MapReduce一样. 2.用于数据交换的数据流,即通过电缆的实际数 ...

  2. asp.net 版本一键升级,后台直接调用升级脚本

    应客户需求,要求实现一个版本一键升级的功能,咨询过同事之后弄了个demo出来,后台代码如下: //DBConnModelInfo:连接字符串的对象 (包含数据库实例名,数据库名,登陆名,登陆密码) p ...

  3. Bootstrap3-导航条

    1. 定义导航条 <!-- 导航条 navbar --> <div class="navbar nav-bar-default"> <ul class ...

  4. MySQL中的存储过程、游标和存储函数

    MySQL中的存储过程首先来看两个问题: 1.什么是存储过程? 存储过程(Stored Procedure)是在数据库系统中,一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存 ...

  5. 2019 多点Dmalljava面试笔试题 (含面试题解析)

      本人5年开发经验.18年年底开始跑路找工作,在互联网寒冬下成功拿到阿里巴巴.今日头条.多点Dmall等公司offer,岗位是Java后端开发,因为发展原因最终选择去了多点Dmall,入职一年时间了 ...

  6. SpringApplication到底run了什么(下)

    在上篇文章中SpringApplication到底run了什么(上)中,我们分析了下面这个run方法的前半部分,本篇文章继续开工 public ConfigurableApplicationConte ...

  7. Python检测URL状态

    需求:Python检测URL状态,并追加保存200的URL 代码一: #! /usr/bin/env python #coding=utf-8 import sys import requests d ...

  8. 解决Eclipe安装不上android的ADT的办法

    Eclipse,https://dl-ssl.google.com/android/eclipse/安装不上去,ADT在线安装装不了,用离线包又出问题时会不会疯掉. 显然,国内网络和谐掉了google ...

  9. html5样式初始化,你值得拥有!!

    /*万能清除法*/     *{padding:0;margin:0;}     li{list-style: none;}     img{vertical-align:top;border: 0; ...

  10. riscv 汇编与反汇编

    为了riscv指令集,我们需要汇编与反汇编工具来分析指令格式. 可以用下面的两个工具来汇编和反汇编,下载链接:https://pan.baidu.com/s/1eUbBlVc riscv-none-e ...