《程序员》2008.09期有一篇名为《无废话ErLang》的文章,这让我想到了许多的诸如“无废话C”、“无废话书评”这类的文章,也想到了JavaScript可没有一篇“无废话”,所以决定开个篇来写这个。与这个决定相关的,还因为另一个缘故:许多读者认为我那本《JavaScript语言精髓与编程实践》读来辛苦,所以我一直想写个简单的读本。索性,这次就写个最简单的吧。
声明一下:如果只想看复杂的东西,不要读这篇文章了。
一、JavaScript最初其实是过程式的
追溯到1.0时代的JavaScript,其实是过程式的。它的基本特性有只有两项,一项是能够直接放在网页的HTML
标签中去接管事件,例如:
复制代码 代码如下:
<input type="button" onclick="alert('hello')">
第二项则是支持一种简单的对象构造器(函数)。其实这个时代的构造器不如说是初始化函数更合适,它应当
这样写:
复制代码 代码如下:
function MyObject() {
this.xxx = '...';
this.yyy = '...';
}
obj = new MyObject();
所以,早期的JavaScript无可置疑地背上了“基于对象的过程式脚本语言”的名头,这一点也不冤枉。除了
上面两项特性,JavaScript有着一些一般性的脚本语言的性质,例如:
-整个.js文件一次性装载到执行环境(例如WEB浏览器)中,在经历一次语法分析之后,开始逐行执行;
-在上述语法分析周期,(具名的)函数和用"var"声明的变量被预先处理在一个标识符表中,以便脚本代码使用;
-从全局的代码行或函数调用开始执行,整个过程中执行不到的代码不被查错(除第一步中的语法检错外)。
也具有通常的过程式语言的性质,例如:
-有if/for/while/switch等语句;
-用function来声明函数,使用"(..)"来声明它的形式参数表,以及表示函数调用和传参;
-类似于C语言的基本语法,包括使用"{..}"来表示代码块,以及使用"!="等运算符号;
-一个类似于Java语言的对象操作运算符"."号,和属性、方法这样的基本概念。
好了,现在你看到了一个基本的JavaScript语言,它的代码只有象C一样的函数与语句行,支持非常简单的面
向对象编程。OK,这其实也差不多是JavaScript的全部……嗯……全部的语法基础观念。如果你用过一门哪怕
稍稍入门一点的程序语言,你都会觉得JavaScript其实挺简单的。
是啊,“写个函数,然后调用它”,就这么简单。例如:
function hi() {
alert('hello, world.');
}
hi();
二、稍微复杂一点的是数据类型
JavaScript有六种基本数据类型,分为两类。一类是值类型,即undefined,string, number和boolean;一类
是引用类型,即function和object。检测数据X是何种类型,可以简单地使用"typeof X"来返回一个字符串。
值类型与引用类型在其它高级语言中,是用“访问过程中是传值还是传引用”来区别的。简单说,在下面函数
中:
function foo(X) {
}
X传入的是值本身,还是一个指向该值的引用(你可以想象成指针),表明了X是何种类型。与其它语言不同的
是,JavaScript不在调用入口上加指示字来说明传值的方法,例如:
function foo(var X) {
// 一般高级语言中,var表明总是传入变量X的引用
}
而是,简单的由脚本引擎根据实际传入的X的数据类型来决定如何传值。例如:
function foo(X) {
...
}
foo('123'); // <- 字符串'123'值
foo(aObj); // <- aObj是一个对象引用
能这样处理的关键,在于JavaScript类型系统足够简洁。六种基本类型包括了三个哲学化的观念:能执行的
与不能执行的;对象或非对象;有(值)或无(值)。显然,理解这种哲学性的思想并不容易,因为更复杂一层
的、自包含的逻辑是:函数也是对象、值也是对象、无值也是值。
这就是JavaScript类型系统的全部了。如果你想简单的用用,那么你记住下面的就够了:
-string、number、boolean三种简单值类型是用来传给网页显示的;
-object用来存放其它的object、funtion或上述简单值类型,并用'.'运算通过一个属性名找到它们;
-undefined是用来检测数据有效无效的;
-function是用来执行的。
当然,如果你要成为思想家或者语言学的疯子,那么去思考上面的哲学化命题吧,我不拦着你。
三、能用鼻子想通的就是直接量了
或许很多人都搞不明白JavaScript中的直接量声明,然而它确实是非常简单的。既然我们大多数高级语言都
支持常量声明,甚至最原始的汇编语言也支持立即值——例如:
// in C
#define ABYTE 256
// in delphi
const
ABYTE = 256
; in asm
mov ah, 256
1234下一页阅读全文
声明一下:如果只想看复杂的东西,不要读这篇文章了。
一、JavaScript最初其实是过程式的
追溯到1.0时代的JavaScript,其实是过程式的。它的基本特性有只有两项,一项是能够直接放在网页的HTML
标签中去接管事件,例如:
复制代码 代码如下:
<input type="button" onclick="alert('hello')">
第二项则是支持一种简单的对象构造器(函数)。其实这个时代的构造器不如说是初始化函数更合适,它应当
这样写:
复制代码 代码如下:
function MyObject() {
this.xxx = '...';
this.yyy = '...';
}
obj = new MyObject();
所以,早期的JavaScript无可置疑地背上了“基于对象的过程式脚本语言”的名头,这一点也不冤枉。除了
上面两项特性,JavaScript有着一些一般性的脚本语言的性质,例如:
-整个.js文件一次性装载到执行环境(例如WEB浏览器)中,在经历一次语法分析之后,开始逐行执行;
-在上述语法分析周期,(具名的)函数和用"var"声明的变量被预先处理在一个标识符表中,以便脚本代码使用;
-从全局的代码行或函数调用开始执行,整个过程中执行不到的代码不被查错(除第一步中的语法检错外)。
也具有通常的过程式语言的性质,例如:
-有if/for/while/switch等语句;
-用function来声明函数,使用"(..)"来声明它的形式参数表,以及表示函数调用和传参;
-类似于C语言的基本语法,包括使用"{..}"来表示代码块,以及使用"!="等运算符号;
-一个类似于Java语言的对象操作运算符"."号,和属性、方法这样的基本概念。
好了,现在你看到了一个基本的JavaScript语言,它的代码只有象C一样的函数与语句行,支持非常简单的面
向对象编程。OK,这其实也差不多是JavaScript的全部……嗯……全部的语法基础观念。如果你用过一门哪怕
稍稍入门一点的程序语言,你都会觉得JavaScript其实挺简单的。
是啊,“写个函数,然后调用它”,就这么简单。例如:
function hi() {
alert('hello, world.');
}
hi();
二、稍微复杂一点的是数据类型
JavaScript有六种基本数据类型,分为两类。一类是值类型,即undefined,string, number和boolean;一类
是引用类型,即function和object。检测数据X是何种类型,可以简单地使用"typeof X"来返回一个字符串。
值类型与引用类型在其它高级语言中,是用“访问过程中是传值还是传引用”来区别的。简单说,在下面函数
中:
function foo(X) {
}
X传入的是值本身,还是一个指向该值的引用(你可以想象成指针),表明了X是何种类型。与其它语言不同的
是,JavaScript不在调用入口上加指示字来说明传值的方法,例如:
function foo(var X) {
// 一般高级语言中,var表明总是传入变量X的引用
}
而是,简单的由脚本引擎根据实际传入的X的数据类型来决定如何传值。例如:
function foo(X) {
...
}
foo('123'); // <- 字符串'123'值
foo(aObj); // <- aObj是一个对象引用
能这样处理的关键,在于JavaScript类型系统足够简洁。六种基本类型包括了三个哲学化的观念:能执行的
与不能执行的;对象或非对象;有(值)或无(值)。显然,理解这种哲学性的思想并不容易,因为更复杂一层
的、自包含的逻辑是:函数也是对象、值也是对象、无值也是值。
这就是JavaScript类型系统的全部了。如果你想简单的用用,那么你记住下面的就够了:
-string、number、boolean三种简单值类型是用来传给网页显示的;
-object用来存放其它的object、funtion或上述简单值类型,并用'.'运算通过一个属性名找到它们;
-undefined是用来检测数据有效无效的;
-function是用来执行的。
当然,如果你要成为思想家或者语言学的疯子,那么去思考上面的哲学化命题吧,我不拦着你。
三、能用鼻子想通的就是直接量了
或许很多人都搞不明白JavaScript中的直接量声明,然而它确实是非常简单的。既然我们大多数高级语言都
支持常量声明,甚至最原始的汇编语言也支持立即值——例如:
// in C
#define ABYTE 256
// in delphi
const
ABYTE = 256
; in asm
mov ah, 256
1234下一页阅读全文
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
免责声明:本站资源来自互联网收集,仅供用于学习和交流,请遵循相关法律法规,本站一切资源不代表本站立场,如有侵权、后门、不妥请联系本站删除!
暂无评论...
稳了!魔兽国服回归的3条重磅消息!官宣时间再确认!
昨天有一位朋友在大神群里分享,自己亚服账号被封号之后居然弹出了国服的封号信息对话框。
这里面让他访问的是一个国服的战网网址,com.cn和后面的zh都非常明白地表明这就是国服战网。
而他在复制这个网址并且进行登录之后,确实是网易的网址,也就是我们熟悉的停服之后国服发布的暴雪游戏产品运营到期开放退款的说明。这是一件比较奇怪的事情,因为以前都没有出现这样的情况,现在突然提示跳转到国服战网的网址,是不是说明了简体中文客户端已经开始进行更新了呢?
更新日志
2024年11月26日
2024年11月26日
- 凤飞飞《我们的主题曲》飞跃制作[正版原抓WAV+CUE]
- 刘嘉亮《亮情歌2》[WAV+CUE][1G]
- 红馆40·谭咏麟《歌者恋歌浓情30年演唱会》3CD[低速原抓WAV+CUE][1.8G]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[320K/MP3][193.25MB]
- 【轻音乐】曼托凡尼乐团《精选辑》2CD.1998[FLAC+CUE整轨]
- 邝美云《心中有爱》1989年香港DMIJP版1MTO东芝首版[WAV+CUE]
- 群星《情叹-发烧女声DSD》天籁女声发烧碟[WAV+CUE]
- 刘纬武《睡眠宝宝竖琴童谣 吉卜力工作室 白噪音安抚》[FLAC/分轨][748.03MB]
- 理想混蛋《Origin Sessions》[320K/MP3][37.47MB]
- 公馆青少年《我其实一点都不酷》[320K/MP3][78.78MB]
- 群星《情叹-发烧男声DSD》最值得珍藏的完美男声[WAV+CUE]
- 群星《国韵飘香·贵妃醉酒HQCD黑胶王》2CD[WAV]
- 卫兰《DAUGHTER》【低速原抓WAV+CUE】
- 公馆青少年《我其实一点都不酷》[FLAC/分轨][398.22MB]
- ZWEI《迟暮的花 (Explicit)》[320K/MP3][57.16MB]