博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
javascript词法分析
阅读量:5024 次
发布时间:2019-06-12

本文共 1130 字,大约阅读时间需要 3 分钟。

大学有一门课程编译原理,记不太清楚了,大体意思是编译器在编译代码的时候,会首先对代码文件/文本进行分析,如果语法错根本就不会进行编译。

javascript run-time同样有这样的作用,没C++基础也没办法看V8源码,只是初探门径

前几天有个哥们问了下

1.toString() 和 1.1.toString()哪个能正常执行,我们先看看toString是怎么定义的,

reference:

Returns a string representing the object.

Method of 
Implemented in JavaScript 1.0
ECMAScript Edition ECMAScript 1st Edition

Syntax

object.toString()

Description

Every object has a toString() method that is automatically called when the object is to be represented as a text value or when an object is referred to in a manner in which a string is expected. By default, the toString() method is inherited by every object descended from Object.

只有object才能调用toString, 我们使用 typeof 1 或是 typeof 1.1 得到的却是 number. 按上面的定义,这2句应该都执行不了。但是我们考虑

var h = "";if(h){  //}

 if是条件判断,里面需要传入boolean型,但是上面的代码编译无错。

我们得出一个结论

javascript run-time会将变量/对象在调用方法/添加行为时转为最恰当类型

回到前面的例子,当我们使用1.toString()会得到一句 [Chrome]SyntaxError: Unexpected token ILLEGAL, [Firefox]SyntaxError: identifier starts immediately after numeric literal

语法错误,而1.1.toString()能得到1.1

1.SoString就是词法分析时未通过,报出语法错误。

继续研究...

转载于:https://www.cnblogs.com/AndrewZhang/archive/2012/02/24/2366829.html

你可能感兴趣的文章
C#调用斑马打印机打印条码标签(支持COM、LPT、USB、TCP连接方式和ZPL、EPL、CPCL指令)【转】...
查看>>
关于git的认证方式
查看>>
字符串按照字典序排列
查看>>
IOS 开发调用打电话,发短信
查看>>
CI 框架中的日志处理 以及 404异常处理
查看>>
keepalived介绍
查看>>
css3 标签 background-size
查看>>
python itertools
查看>>
Linux内核调试技术——jprobe使用与实现
查看>>
样式、格式布局
查看>>
ubuntu设计文件权限
查看>>
Vue双向绑定原理详解
查看>>
Android基础总结(5)——数据存储,持久化技术
查看>>
关于DataSet事务处理以及SqlDataAdapter四种用法
查看>>
bootstrap
查看>>
http://lorempixel.com/ 可以快速产生假图
查看>>
工程经验总结之吹水"管理大境界"
查看>>
为什么JS动态生成的input标签在后台有时候没法获取到
查看>>
20189210 移动开发平台第六周作业
查看>>
java之hibernate之基于外键的双向一对一关联映射
查看>>