Node实战:2 进一步了解JavaScript

本文深入探讨了JavaScript的基础数据类型、类型比较与转换、函数、语言结构、类与继承机制等核心概念。通过具体示例说明了如何利用原型进行高效的对象继承,并介绍了Node.js中的全局对象及其用途。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2.1 数据类型

    类型基础:

2.2 类型比较和转换

   相等运算符==(判断两个操作数没有相同的值)和严格相等===(判断两个操作数有没有相同的值以及是否为相同的数据类型)

2.3 函数

    基本概念:

    函数作用域:

2.4 语言结构

    JavaScript包含了几乎所有的语言操作符和语句结构,其中包括绝大部分逻辑操作符和算术操作符。

2.5 类、原型和继承

    JavaScript的面向对象编程与其他语言有很大不同,因为JavaScript没有明确的类(class)关键字或类型。事实上,JavaScript中所有的类都是以函数的形式定义的:

function Shape () {
    this.X = 0;
    this.Y = 0;
    this.move = function (x, y) {
        this.X = X;
        this.Y = y;
    }
    this.distance_from_origin = function () {
        return Math.sqrt( this.X * this.X + this.Y * this.Y );
    }
}
var s = new Shape();
s.move(10, 10);
console.log( s.distance_from_origin() );
   这种创建类的方式存在两个问题

   首先,效率似乎有点低下,每个对象都必须自己实现类方法。

   其次,我们可能需要继承这个类来创建圆形和方形,并让新的类继承基类(base class)的方法和属性而不必做任何额外的工作。

   原型和继承

   默认情况下,所有的JavaScript对象都有一个原型对象,它是一种继承属性和方法的机制。原型是多年来JavaScript中很多混乱的源头,往往是因为不同的浏览器使用不同的命名和略微不同的实现。

function Shape () {
}

Shape.prototype.X = 0;
Shape.prototype.Y = 0;

Shape.prototype.move = function (x, y) {
	this.X = x;
	this.Y = y;
}
Shape.prototype.distance_from_origin = function () {
	return Math.sqrt(this.X * this.X + this.Y * this.Y );
}
Shape.prototype.area = function () {
	throw new Error("I don't have a form yet");
}
var s = new Shape();
s.move(10, 10);
console.log(s.distance_from_origin());
   除了可能稍微提升内存的效率之外(如果创建了大量的实例,它们都将共享而不是自己创建move和distance_from_origin方法),如果添加一个area方法,则所有的shape实例都会拥有这个方法。而在基类中,这种方式却行不通,它会抛出错误。

   更为重要的是,我们可以很容易地对类进行扩展:

function Square() {
}

Square.prototype = new Shape();
Square.prototype.__proto__ = Shape.prototype;
Square.prototype.Width = 0;
Square.prototype.area = function () {
	return this.Width * this.Width;
}

var sq = new Square();
sq.move(-5, -5);
sq.Width = 5;
    __proto__属性,它能够告诉JavaScript声明的新类的基本原型应该是指定的类型,因此也就可以从指定的类进行扩展。
2.6 错误和异常

    JavaScript中,通常使用Error对象和一条信息来表示一个错误。

2.7 几个重要的Node.js全局对象

    global变量:任何附加到该对象上的东西在node应用中的任何地方都是可见的:

function printit(var_name) {
	console.log(global[var_name]);
}
global.fish = "swordfish";
global.pet = "cat";
printit("fish");
    console对象:有一个全局变量console。它有些有趣的函数:

  • warn(msg) --- 与log类似的函数,但打印的是标准错误(stderr)。
  • time(label)和timeEnd(label) --- 第一个函数被调用时会标识一个时间戳,而当第二个函数被调用时,会打印出从time函数被调用后中间经过的时间。
  • assert(cond, message) --- 如果cond等价于false,则抛出一个AssertionFailure异常。

    process对象:它包含许多信息和方法。exit方法是中止Node.js程序的方式之一,而env函数会返回一个对象,它包含了当前用户的环境变量,而cwd则返回应用程序当前的工作目录。



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值