前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >从Javascript到Typescript到Node.js

从Javascript到Typescript到Node.js

作者头像
owent
发布于 2018-08-01 09:03:30
发布于 2018-08-01 09:03:30
2.4K00
代码可运行
举报
文章被收录于专栏:owentowent
运行总次数:0
代码可运行

最近看了点typescript的东西,加上以前看过的一点点Node.js,所以就想把他们系统地整理一下。

Javascript

这玩意搞过Web开发的应该都知道吧,Javascript的语法我就不废话了,挺简单的。这里总结几个Javascript的核心机制部分吧。

关于对象

Javascript里所有东西都是对象,数字是Number,数组是Array,字符串是String,函数也是Function对象。而所有对象都基于Object对象。

闭包

闭包在Javascript里是很重要的概念,很多实现机制都会利用这点。闭包由function确立,子闭包可以访问外部的变量,但是外部的不能访问字闭包内的成员。特别是涉及回掉函数的地方,可以利用这一点来避免透传参数。

原型模型

Javascript的一个重要特点就是它是原型模型的(什么是原型模型请参考《设计模式》)。function是一个原型为Function实例的对象,同时可以由它来创建新的对象。在Javascript对象查找成员的时候,如果当前对象不存在,就会去其原型中查找。按照原型链找到头为止。如果还没找到,就返回undefined。 每一个function都可以通过设置prototype成员指定它的类型原型实例,要注意这里是原型的实例而不是原型的类型。比如

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
a.prototype = new b();

然后在new这个function的时候,新对象的原型就回指向这个原型实例。 另外,由于Javascript没有类似protected和private之类的关键字。所以在模拟面向对象继承的时候,只能使用私有成员(通过var申明)公有成员(使用this.[成员名字]或[function名称].[成员名字]申明)

Javascript的坑

作为一个脚本语言,果断是要有坑滴。且不说弱类型语言在复杂项目中类型混用的问题。单就boolean类型就有一个小坑。

比较符号

和大多数脚本语言一样,javascript是可以隐式类型转换滴,而且Number类型的0和字符串类型的空串转换成boolean的时候都是false。所以如果出现 0 == false 和 “” == false 之类的比较,返回的都是true。如果要加类型判断要用 0 === false 和 “” === false 这样,这就返回false了,对应的不等号是!==,和PHP一样。

eval

eval函数的作用闭包是当前闭包,所以执行完

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
eval('var abc = 123;');

之后,abc就变成Number类型的值为123的东东了,后面也可以用到。 忽略var关键字 有的时候会忽略或者忘记掉var关键字,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a = b = 123;

这行代码会把b写到window对象(浏览器)或global对象(Node.js)中。 同样,一不注意可能写出这样的代码

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(key in list){
...
}

同样这会把key带出,导致一些未预料的错误,所以应该补全var关键字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
for(var key in list){
...
}

工具

Javascript部分的最后记录一点Javascript和网页相关的工具。

Typescript

要使用Javascript做大型的东西还是有不少坑的。首先它是弱类型的,一旦项目庞大了就很难保证类型不出错。并且有时候不经意间就会用到浏览器特有的东西。而Typescript就可以用来帮助你约束一些脚本行为,并编译成兼容各种浏览器的Javascript代码。 Typescript由微软开发,提供了Visual studio编译插件、Web版转换器(话说这个在线IDE真心给力)和Node.js插件,向上兼容Javascript语法。

类型限定

Typescript的特点之一是增加了类型限定。比如:string, number, boolean, any等等。在定义变量的时候,可以在后面加 : [类型名]来指定类型。如果发现类型不匹配或者出现非法的隐式类型转换就会编译报错。如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a: number;
var b: string;
var c: any;

为了向上兼容Javascript,所以如果不声明类型的话,默认是any。有一个特殊的类型,函数。函数类型的申明有点像lambda表达式。比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a: (Number, string) => string

表示a是一个函数,第一个参数类型是Number,第二个是string,返回值是string类型。 另外,数组类型就是在普通类型后面加方括号[],如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var a: string[];

变量限定

除了对类型进行规范以外,typescript还可以对未申明变量进行检查,避免前面说到的忘记写var的问题。 在typescript中,如果直接使用未定义的变量,会编译错误。而如果想要申明外部变量,可以用*declare*关键字,比如:declare var jQuery;

接口Interface

在typescript中,可以用*interface*关键字来申明接口。而使用这个接口的地方,编译程序会检查传入的变量和常量的类型是不是包含接口中声明的全部功能,并且类型一致。

模块Module

module关键字用于声明模块,其实就是Javascript里的闭包啦,需要注意的是module里的默认的东西都是*private*的,也就是用*var*申明的,如果要把它变成public的要在前面加export,比如:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
export function getEnvironment() {
    return new TEnvironment();
};
 
export interface IEnvBrowserInfo {
    getBrowserName: () => string;
    getBrowserVersion: () => TEnvVersionInfo;
    getBrowserKernelName: () => string;
    isCompatMode: () => bool;
    isCookieEnabled: () => bool;
 };

类class

Typescript增加了*class*关键字,用于定义一个类。类里面的*constructor*方法作为构造函数。 对于typescript的类,仅支持单继承和private与public关键字。不支持protected。其内部*private*由*var*实现,public由[类名|this].[成员名实现]。而继承呢,就是前面说的prototype实现的。但是可以继承多个*interface*,因为*interface*只是一个类型限定而已。 在构造函数里,可以使用*super*关键字访问父类的成员,而且这个关键字也只能在构造函数里使用。

其他特性其他特性像什么common.js和AMD的推荐和define Property要求第三方组件和高版本js引擎就略过啦。前两个是异步加载公共模块的东东,后一个是模仿C#的set和get的玩意。

Node.js

Node.js是用于服务端的Javascript开发框架。Javascript部分基于Google V8引擎,据说性能非常之不错。 它采用了Javascript回调那种优雅的设计模式,最初是为了解决高连接数下的服务器性能消耗问题。并且其申称不会用锁,所以不会有死锁。 Node.js的作者实现了一些底层系统操作,并交付到javascript接口使用。比如进程、网络、加解密、内存管理文件系统等。还实现了global对象替代浏览器里的window对象,作为最外层的闭包使用。 Node.js的功能都是按模块划分的,具体模块可以见 http://nodejs.org/api/ 。而且Typescript可以作为Node.js的插件供其使用。

用Node.js实现网络服务十分简单,比如官方的HTTP服务器例子:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var http = require('http');
http.createServer(function (req, res) {
  res.writeHead(200, {'Content-Type': 'text/plain'});
  res.end('Hello World\n');
}).listen(1337, '127.0.0.1');
console.log('Server running at http://127.0.0.1:1337/');

C++

如果要把Node.js和C++结合起来也比较easy(至少我觉得比lua简单多了,可能是因为它设计上就是面向对象的)。要把C++代码和Node.js打通,就需要Google V8引擎、Node.js的*node::ObjectWrap*包装基类。所有要导出到Javascript的类都需要继承*node::ObjectWrap*。

所有要导出的C++模块都要实现一个初始化函数,初始化函数的申明式为**void Initialize (Handle exports); 的形式。然后要通过Node.js的一个宏NODE_MODULE([模块名称], [初始化函数])**来定义模块。 然后在初始化函数中通过 exports->Set(String::NewSymbol(“符号名称”), 符号内容); 来注册函数或者类符号。 之后要建立node-gyp的编译配置文件bind.gpy

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
  "targets": [
    {
      "target_name": "编译目标文件名",
      "sources": [ "源码文件集合" ]
    }
  ]
}

然后执行 node-gyp configure build 编译就好了。编译完后默认会放在build/Release/addon里。然后node.js里用js代码require进来就好

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
var addon = require('./build/Release/[编译目标名]);
console.log( 'call:', addon.[注册的符号调用] );

这样,基本的Node.js插件的开发就完成了,具体可以参照:http://nodejs.org/api/addons.html

Debug

Node.js调试起来也比较Nice,大致上3种方式

  • 第一种是类似gdb的调试方法,直接 node debug [javascript文件名],后面的操作类似gdb
  • 第二种是Google为V8引擎做的Eclipse插件,具体使用方法可以参考这里 http://cnodejs.org/blog/?p=911 ,然后用node –debug-brk[=端口号] [javascript文件名] 来启动远程调试
  • 第三种是直接拿Chrome浏览器来调试,这个比较Nice。首先要通过npm install -g node-inspector安装node-inspector扩展;再启动Node.js程序并加–debug或者–debug-brk选项;最后,浏览器端的使用方式类似Android设备Chrome的远程调试,地址栏里输入http://[IP地址]:[ node-inspector端口号,默认8080]/debug?port=[Node.js的Debug选项的端口号] 来连接调试服务,就完啦。

最后

其他Node.js的功能就不介绍了,都是些功能模块,需要用到就在如然后用呗,官方文档挺简单易懂的。主要是Node.js利用了Javascript里伪多线程的全异步的设计思路。然后借由无锁操作来让开发人员可以快速地开发比较高效的服务程序。

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2013-07-10,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
TypeScript语言特性(下)
下面这段代码声明了一个boolean类型的变量 isValid。然后,一个 if 语句会判断 isValid 的值是否为true。如果判断结果为true,则在屏幕上会显示消息Is valid!。
博文视点Broadview
2020/06/12
1K0
CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
根据给定的文章内容,撰写摘要总结。
张果
2018/01/04
2.5K0
CSS3与页面布局学习总结(七)——前端预处理技术(Less、Sass、CoffeeScript、TypeScript)
实用 | 读源码,学JavaScript
Javascript于1995年由网景公司的Brendan Eich发明。 最初发明的目的是作为一个简单的网站脚本语言,来作为复杂网站应用java的补充。但由于它与网页结合度很高并且由浏览器内置支持, 所以javascript变得比java在前端更为流行了。 不过 JavaScript 可不仅仅只用于浏览器: Node.js,一个基于Google Chrome V8引擎的独立运行时环境,也越来越流行。 很欢迎来自您的反馈,您可以通过下列方式联系到我: @adambrenecki, 或者 adam@brenecki.id.au.
疯狂的技术宅
2019/03/28
5040
TypeScript超详细入门教程(上)
同学你好,我是Lison。很高兴你对TypeScript感兴趣,或许你对TypeScript了解还不多,或许还有很多疑问,比如:
全栈程序员站长
2022/11/16
4.3K0
TypeScript超详细入门教程(上)
Node.js 4.0的ES6新特性。
Node.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境。Node.js 使用了一个事件驱动、非阻塞式 I/O 的模型,使其轻量又高效。Node.js 的包管理器 npm,是全球最大的开源库生态系统。
笔阁
2018/09/04
1K0
TypeScript--deno前置学习
(1)Node与Deno 的区别:Node 可以工作,而 Deno 不行,Deno 只是一个原型或实验性产品。
wfaceboss
2019/04/08
2.6K0
TypeScript--deno前置学习
前端入门25-福音 TypeScript声明正文-TypeScript
今天来讲讲有 Java 基础转 JavaScript 的福音:TypeScript
请叫我大苏
2018/12/27
3.2K0
Node.js新手必须知道的4个JavaScript概念
如果只需要知道一种编程语言就可以构建一个全栈的应用程序,是不是特别了不起?Ryan Dahl为了把这个想法成为现实,创造了node.js。Node.js是建立在Chrome强劲的V8 JavaScript引擎上的服务器端框架。虽然最初是用C++编写的,但是应用程序通过JavaScript运行。 这样一来,问题就解决了。一种语言就可以统治一切。而且,在整个应用程序中你只需要使用这一种语言。所以,我们需要深刻了解node.js。这就是本文的主题。 下面这四个基本概念是你想要掌握node.js所必需的。我会尽可能
李海彬
2018/03/22
1.1K0
Node.js新手必须知道的4个JavaScript概念
前端开发面试题总结之——JAVASCRIPT.One
数据类型、运算、对象、function、继承、闭包、作用域、原型链、事件、RegExp、JSON、Ajax、DOM、BOM、内存泄漏、跨域、异步加载、模板引擎、前端MVC、前端MVVM、路由、模块化、Http、Canvas、jQuery、ECMAScript 2015(ES6)、Node.js、AngularJS、Vue、React…
用户9184480
2024/12/19
1660
前端开发面试题总结之——JAVASCRIPT.One
TypeScript真香系列——接口篇
这对于我们之前在写 JavaScript 的时候,再正常不过了,但是如果这个 getUserInfo 在多人开发过程中,如果它是个公共函数,多个开发者都会调用,如果不是每个人点进来看函数对应注释,可能会出现以下问题:
coder_koala
2019/11/18
9850
如何从JavaScript跨越到TypeScript [基础进阶知识点]
一致,都会导致报错。 建议使用npm 全局安装typeScript 然后使用 tsc *.ts 进行编译TS文件
Peter谭金杰
2019/08/02
1.3K0
TypeScript 看见未来的 JavaScript
TypeScript也可以看作是“更好的JavaScript”,TypeScript充分利用了JavaScript原有的对象模型并在此基础上做了扩充,添加了较为严格的类型检查机制,添加了模块支持和API导出的能力。比起JavaScript,TypeScript提供了更多在语言层面上的支持,使得程序员能够以更加标准化的语法来表达语义上的约束,从而降低了程序出错的机率;TypeScript也使得代码组织和复用变得更加有序,使得开发大型Web应用有了一套标准方法。 下面是完成同样功能的两段简单代码。 TypeSc
孙亖
2018/06/07
7930
30道TypeScript 面试问题解析
TypeScript 是 Microsoft 开发的JavaScript 的开源超集,用于在不破坏现有程序的情况下添加附加功能。
前端达人
2021/07/16
4.4K0
typescript 和class 类
TypeScript 是一种给 JavaScript 添加特性的语言扩展。增加的功能包括:
conanma
2021/12/07
1.3K0
TypeScript语言特性(上)
小编说:TypeScript是一个开源的、跨平台且带有类型系统的JavaScript超集,它可以编译为纯JavaScript,然后运行在任意的浏览器和其他环境中。它使开发者可以使用一些未来JavaScript标准(ECMAScript 6和7)中的特性。TypeScript为JavaScript添加了可选的静态类型、类和模块,让大型JavaScript应用可以使用更好的工具并拥有更清晰的结构。
博文视点Broadview
2020/06/12
9770
Typescript学习笔记,从入门到精通,持续记录
TypeScript 最大的优势之一便是增强了编辑器和 IDE 的功能,包括代码补全、接口提示、跳转到定义、重构等。
房东的狗丶
2023/02/17
2K0
快速学习TypeScript——模块
从ECMAScript 2015开始,JavaScript引入了模块的概念。TypeScript也沿用这个概念
玖柒的小窝
2021/11/16
1.2K0
Node.js的介绍
作者:sagittarius-rev 链接:https://www.zhihu.com/question/31305968/answer/116439739 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
用户8870853
2021/08/30
1.4K0
如何在 Node.js 中使用 TypeScript
这是一篇为初学者详细介绍如何在 Node.js 中使用 TypeScript的指南。本指南将涵盖基础知识、开发环境的设置以及一些实用的代码示例。希望这篇文章能够帮助你顺利入门并在未来的项目中应用这些技术。
摸五休二
2024/06/21
8070
如何在 Node.js 中使用 TypeScript
TypeScript 入门
通过 node -v 命令查看本机是否安装,如果没有安装,参考node.js安装指南 根据电脑系统环境进行安装
王秀龙
2021/08/23
1.7K0
TypeScript 入门
相关推荐
TypeScript语言特性(下)
更多 >
领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验