了解JavaScript

JavaScript|深入了解JS原型链 原型prototype 每个函数都有一个prototype属性,它默认指向一个object空对象(没有我们定义的属性),即称为原型对象。这里一般讨论构造函数。 其中Objecty也是有原型对象的。 当函数通过构造函数形式调用时,它所创建的对象都有一个隐含的属性:指向构造函数的原型对象,我们可以通过 __proto__ 来访问该属性。 原型对象中还有一个contructor属性,它指向函数对象。 构造函数、实例和原型对象在内存中的关系图1: 图1对应的伪代码如下: function Myclass(){ 阅读详情

1 数据类型

1.1 类型基础

Node.js的核心类型有:number(数字)、boolean(布尔值)、string(字符串)以及object(对象)。function(函数)和数组(array)实际上是object的特殊形式。null和undefined也是object的特殊形式,在JavaScript中有特殊作用。

undefined值代表还没有赋值或者不存在。null的意思就是“没有值”。我们可以使用typeof操作符查看任何数据的类型。

1.2 常量

虽然Node.js理论上支持const关键字,但是在JavaScript中const并没有被广泛使用。对于常量,还是使用大写字母和变量声明(var)。

1.3 number

JavaScript中所有数字都采用64位双精度浮点数表示。
当对浮点数进行算术运算时,仅仅操作任意的实际数字并不一定能得到准确值。例如:

> 1 - 0.2 + 0.1 == 0.9
false
>

正无穷大(Infinity)和负无穷大(-Infinity)在JavaScript中是合法的值,可用于比较。
isNaN函数可用于验证传入的参数是否位number类型。
isFinite函数可以测试一个给定的值是否是一个合法的有限数(不是Infinite、-Infinite或者NaN)。

1.4 boolean

JavaScript会在需要时自动将任何值转换为布尔值,转换规则如下:
1)false、0、空字符串(”“)、NaN、null和undefined都等价于false。
2)其他赋值等价于true。

1.5 string

要将两个字符串组合在一起,可以使用+操作符:

> "cats" + "go";
cats go
>

如果将其他类型的数据混入到字符串中,JavaScript将尽可能将其他数据转换成字符串:

> var year = 2017;
>  "This year is " + year + "!";
This year is 2017!
>

但是也有可能发生这样的情况:

> 5 + 2 + "is 7!";
7 is 7!

这时候可以在表达式前加一个空字符串,用来提前强制转换数据类型:

> "" + 5 + 2 + "is 7!";
52 is 7!

字符串函数
使用indexOf函数可以在一个字符串中搜索另外一个字符串。

> "Wishy washy winter".indexOf("wash");
6
>

截取子字符串可以使用substr(传入参数:开始索引和截取长度)或者slice(传入参数:开始索引和结束索引)。

> "Tomjack".substr(0,2);
To
> "Tomjack".slice(0,3);
Tom
>

如果字符串有某个分隔符。可以使用split函数将字符串分割成子字符串并返回一个数组:

> "a|b|c".split("|");
['a', 'b', 'c']
>

可以使用trim函数去除字符串前后的空格。

1.6 object

对象是一种相当动态和灵活的数据类型,可以轻松为其新增或者删除属性。创建对象的方式有两种:

var o1 = new Object();
var o2 = {};

推荐使用后者,它就是对象字面量语法(object literal syntax),它是目前最推荐的写法。
使用对象字面量语法可以指定对象的内容。在初始化时,可以指定对象成员的名字以及对应的值:

var user = {
    name : "Tom",
    year : "20"
};

注:JSON和对象字面量很相似,但是二者之间有个关键区别:对象字面量使用单引号或者双引号封装属性名,甚至可以不适应引号,而在JSON中所有字符串都需要包含在双引号中。(但是大部分JSON库已经兼容单引号了。)

我们可以使用以下方法为对象添加新属性:

user.hair = "black";
user[hair] = "black";
//也可以这样
var attr = "hair";
user[attr] = "black";

删除某个属性可以这样:

delete user.hair;

获取对象大小,使用如下写法(V8 JS):

Object.keys(user).length;

1.7 array

创建数组也有两种方式:

var a1 = new Array();
var a2 = [];

推荐使用后者的数组字面量语法(array literal syntax)创建数组。

使用typeof看一下:

> typeof(a2);
object
>

因为数组实际上就是对象,所以tepeof运算符会返回“object”。V8有一个语言扩展,可以确定是否为一个数组:Array.isArray函数(V8 JS)。

> Array.isArray(a2);
true
>

可以通过特定的元素索引插入新元素。如果索引超过了最后一个元素,则两者之间的元素会被创建,并初始化为undefined:

> arr2.push("a");
> arr2[3] = "d";
> arr2
['a', '', '', 'd']
> arr2[2];
undefined
>

可以使用delete删除数组元素,但是结果,看一下:

> delete arr[3];
['a', '', '', '']
>

可以看到索引3位置对应的元素仍然存在,只是值被设为undefined。
我们可以使用splice函数,它接收删除项的起始索引和结束索引。

> arr2.splice(1, 3);
> arr2
['a']
>

实用函数
push和pop函数让我们向数组的末尾添加或者删除元素。

unshift和shift在数组的头部插入或者删除元素。

与之前提到的split相反,join函数返回一个字符串:

> var nums = [1, 2, 3];
> nums.join(",");
'1, 2, 3'
>

2 函数

JavaScript是一门函数式编程语言(functional programming language),这意味者函数是完全意义上的对象,可以被操纵、扩展,还可以作为数据进行传递。

2.1 函数作用域

每次调用函数,都会创建一个新的变量作用域。父作用域中声明的变量对该函数是可见的。但是当函数推出后,该函数作用域中声明的变量就会失效。

var height = 3;
var radius = 5;
var volume;
(function() {
    var pir = Math.PI * radius * radius;
    volume = (pir * 3) / 2;
})();
console.log(volume);
console.log(pir);//这时候便会报错,pir is undefined

上面的例子中,当匿名函数退出后,里面的私有变量也会消失。

2.2 语言结构

JavaScript支持几乎所有的语言操作符和语言结构。它还支持新的for循环–for…in循环。这种循环用于获取对象的所有属性名:

var user = {
    firstName : "tom",
    lastName : "ben"
};
for (key in user) {
    console.log(key);
}
for (key in user) {
    //注意这里可不能使用user.key,在循环中,已经转换成数组了
    console.log(user[key]);
}

2.3 类、原型和继承

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 = function (x,y) {
    return Math.sqrt(this.x*this.x + this.y*this.y);
}
Shape.prototype.area = function (x,y) {
    throw new Error("Shape没有面积");
}
console.log("以下为Shape类");
var s = new Shape();
s.move(5,3);
console.log(s.distance());

默认情况下,所有的JavaScript对象都有一个原型(prototype)对象,它是一种继承属性和方法的机制。

function Square () {
}
Square.prototype = new Shape();
Square.prototype._proto_ = Shape.prototype;
Square.prototype.width = 0;
Square.prototype.area = function () {
    return this.width*this.width;
} 
console.log("以下为Square类");
var sq = new Square();
sq.move(-5,-5);
sq.width = 5;
console.log(sq.area());
console.log(sq.distance());
//类型测试
console.log(sq instanceof Square);
console.log(sq instanceof Shape);

新Square类的代码用到了一个新的语言特性:_proto_属性。它告诉JacaScript声明的新类的基本原型应该是指定的类型,因此也就能够从指定的类进行扩展。

此外:可以使用全局变量console来计算程序运行的时间:

var label = "运行时间:";
console.time(label);
/*  主要程序代码  */
console.timeEnd(label);

输出形如:运行时间:17ms

你并不了解 JavaScript:入门 - 第二版 - 第一章:什么是 JavaScript? 这是一个深入研究 JavaScript 语言核心机制的系列图书。这是该系列图书的第二版。 阅读详情

相关推荐

NodeJs基本语法和类型

主要介绍了NodeJs基本语法和类型的相关资料,需要的朋友可以参考下

Node基础学习(三):JavaScript的基本数据类型

JavaScript的基本数据类型

千里之行,始于足下 1646

《MySQL高级篇》十四、多版本并发控制

《MySQL高级篇》十四、多版本并发控制

LXYDSF的博客 3992

node.js对象数据类型

在这里复习下前端JS的数据类型:前端JS中的数据类型: 1.基本/原生/值类型 string、number、boolean、null、undefined 2.引用/对象类型 ES对象类型:String、Number、Boolean、Math、Date、RegExp、Object、Function、Error,Array,Global对象。 BOM对象类型:win...

weixin_30446613的博客 293

手把手教你逆向分析某里系bx-ua参数(以225版本为例)

本文详细解析了某里系应用bx-ua参数的逆向工程实战方法,重点拆解其三层加密体系(二进制加密、字符替换和Base64编码)。通过工具链配置和实战案例,帮助开发者掌握逆向分析技巧,适用于合法合规的安全研究和加密技术评估场景。

weixin_33220360的博客 411

详解一典型的反激式开关电源方案

如图,在某系统方案上看到下图所示的单端反激式开关电源方案。

alala120的博客 1万+

node.js-数据类型

Boolean value Boolean '' false 0 false Nan false undefined false null false other true Boolean(value):数值转换真值 Number 进制 进制 表示 数值(十进制) 说明 二进制 0b10 2 八进制 010 8 严格模式下

godme 5858

保姆级教程:用Adams/Car和Simulink搞定你的第一个整车联合仿真(附模型文件)

本文提供了一份详尽的Adams/Car与Simulink联合仿真教程,涵盖从环境配置到模型导出的全流程。通过实战案例解析,帮助工程师快速掌握多体动力学仿真与控制算法开发的集成技术,特别适合汽车工程领域的初学者。文章还包含常见问题解决方案和性能优化建议,助您高效完成整车联合仿真项目。

weixin_29663861的博客 337

Node.js通用计算2--JavaScript数据类型和运算符

此文大部分为抄袭网上现有知识,这里只相当于提纲挈领的做个笔记,具体的可以参看,上面写的比我详细的多。

fanjinzhi的博客 870

17|CI/CD 集成与质量门禁:让精准测试进入发布流水线

本文讲解精准测试如何接入 CI/CD 流水线,并通过质量门禁辅助发布决策。测试开发工程师。Java 后端开发工程师。质量平台 / DevOps 平台建设者。想了解精准测试落地方法的技术负责人。

专注 AI 精准测试平台实战落地,分享从代码 Diff 到回归决策的完整工程闭环。主张“先建数据链路,再上 AI 智能”,让测试从“靠经验”走向“基于风险”。 65

如何使用 Python 爬虫获取猫眼电影数据:电影评分与评论分析

随着互联网的快速发展,越来越多的人开始使用各种在线平台来了解电影信息,猫眼电影作为一个非常流行的在线电影票务平台,提供了详细的电影评分、评论和票房数据。本篇博客将详细介绍如何使用 Python 爬虫技术获取猫眼电影平台上的电影数据,重点关注电影评分和用户评论的爬取,分析其背后的数据处理和反爬虫技术。如果你对数据分析、电影评论分析等话题感兴趣,可以根据本文的示例进一步深入挖掘更多的数据,为决策提供支持,或为电影产业的相关研究提供有价值的分析依据。有些猫眼电影的页面数据是动态加载的,使用。

2201_76125261的博客 1623

Nodejs----基本数据类型

Nodejs基本数据类型:   nodejs的基础JavaScript(脚本语言)。 而大多数的 转载于:https://www.cnblogs.com/w-s-l123/p/9417785.html

weixin_30664051的博客 931

从自然语言到PCB设计:DeepSeek与Altium协同自动化实战指南

摘要:在电子设计领域,将自然语言需求转化为PCB设计图是实现自动化设计的重要目标。受限于当前NLP和EDA技术,通过DeepSeek直接生成完整PCB设计图尚无法实现,但在设计辅助环节已展现实用价值。本文深入分析技术可行性,提出"自然语言→设计约束→脚本生成→人工验证"的人机协同工作流。通过28个完整代码示例、12张技术图表及5个工程案例,详细展示DeepSeek解析需求、生成设计约束,并结合Altium Designer API实现元件放置、规则设置、DRC校验的全流程。

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1761

JavaScript学习 (一)js简介,初步了解js

一、web发展史 Mosaic,是互联网历史上第一个获普遍使用和能够显示图片的网页浏览器。于 1993年问世。 1994 年 4 月,马克.安德森和 Silicon Graphics(简称为 SGI,中译为“视算科技”或“硅 图”)公司的创始人吉姆·克拉克(Jim Clark)在美国加州设立了“Mosaic Communication Corporation”。 Mosaic 公司成立后,由于伊利诺伊大学拥有 Mosaic 的商标权,且伊利诺伊大学已将技术转让给 Spy Glass 公司,开发团队必须彻底重

qq_44799466的博客 1921

自抗扰控制(ADRC)理论与工程实践:8.1 自适应ADRC与参数在线整定

自适应自抗扰控制(AADRC)针对传统固定参数ADRC在动态变化系统中的局限性,提出通过在线调整关键参数(如观测器带宽ω₀、控制器带宽ω_c)以适应对象动态变化。主要方法包括基于稳定性理论的自适应律设计和基于性能指标的优化调节,前者保证闭环稳定但设计复杂,后者通过梯度搜索或模糊规则实现性能优化但缺乏严格稳定性证明。当前挑战在于非线性时变系统的稳定性分析、参数变化速率限制及工程实现的计算负担。AADRC拓展了ADRC在变参数系统(如无人机、软体机器人)中的应用,是迈向自主智能控制的关键技术。

技术工作者 214

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

重学JavaScript之了解JS历史和起源

工作了几年,发现自己基础有点薄弱想要不足自己的弱点完善自己的知识体系。js是作为前端的最重要的部分之一, 目前常用的几种框架 React 、Angular 、Vue.js 都是有js开发完成。学好JS, 把握住JS的特性,会对后续的工作中技能强化和发展提供极大的帮助。要对一门语言进行学习,首先要了解其语言特性和其历史发展,更方便理解每个迭代的目的和语言中模糊的概念。

weixin_43968931的博客 558

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

【JavaScript】一文了解JS的闭包

详解JavaScript的闭包使用及其日常开发遇到的常见问题

ztK63LrD的博客 4052

IEM模型,地表粗糙度模拟

利用微波反演土壤水分时候,利用IEM模型可以实现对随机地表的模拟

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Javascript入门阶段——了解JS

1.1 JavaScript的定义 是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。 它是未来5到10年主流的编程语言,并且对于编程的结果能有很好的展现。 对于初学者,尤其是中小学生来说是首选的编程语言。 1.2 使用的软件 市面上有许多软件 比如WebStorm 或 Intellij IDEA 小编喜欢用aptana studio3 点这里下载软件 当然使用其他的软件不影响运行 1.3 创建Html文件 我们的代码需要在html文件里编译 首先打开我们的aptana软件 创建文件夹

YWX_KB的博客 2562

JavaScript(JS)的简单了解

JavaScript(JS)的简单了解

m0_68989458的博客 3050

深入了解JavaScript执行过程(JS系列之一)

前言 JavaScript 执行过程分为两个阶段,编译阶段和执行阶段。在编译阶段 JS 引擎主要做了三件事:词法分析、语法分析和代码生成;编译完成后 JS 引擎开始创建执行上下文(JavaScript 代码运行的环境),并执行 JS 代码。 编译阶段 对于常见编译型语言(例如:Java )来说,编译步骤分为:词法分析 -> 语法分析 -> 语义检查 -> 代码优化和字节码生成 ...

前端攻城狮 3520

【JavaScript基础】深入了解JS的闭包

闭包是JS中一个重要的概念,也是面试中的重点,相信大家在面试中都会碰到这样的几个问题: 1. 请你说说什么是闭包? 2. 请你说说闭包有哪些应用? 3. 请你说说闭包有哪些优缺点? 大家都是怎么回答这几个问题的呢?在网上的文章中对闭包的概念都有不同的说法,导致很多人对闭包没有一个清晰的概念,接下来就和我一起探究什么是闭包。 首先...

weixin_41531446的博客 349

前端基础笔记07-了解JS

前端基础笔记07-了解JS //js定义变量 es5使用var,es6使用let,const(定义变量) // 定义一个字符串 let str = "hello"; // 在控制台输出 console.log(str); // 定义一个数字 let num = 123; // 在控制台输出变量的类型,使用typeof判断 console.log("num类型是:"+typeof num); //定义布尔类型变量 var bool= true; console.log(bool); console.log

w1226234212的博客 234

11.初始JavaScript[初步了解何为js]

JavaScript (简称 JS) - 是世界上最流行的编程语言之一 - 是一个脚本语言, 通过解释器运行 - 主要在客户端(浏览器)上运行, 现在也可以基于 node.js 在服务器端运行. 那么接下来博主就为大家简单讲解一下何为JavaScript!

xinhang10的博客 4902

【Node.js】使用 Node.js 需要了解多少 JavaScript?

总的来说,使用 Node.js 开发并不要求你掌握所有 JavaScript 的高级知识,但了解 JavaScript 的基础和异步编程的核心概念,将大大提高你的开发效率。通过不断学习和实践,你将能够利用 Node.js 构建出高效、可扩展的应用程序。希望本文能帮助你了解在学习 Node.js 之前需要掌握的 JavaScript 知识,帮助你在 Node.js 的开发路上走得更远。祝你编码愉快!

佚名程序员 1934

《你不知道的JavaScript》:深入了解js对象

前面讲完了词法作用域和this机制。接下来要看下js中重头:对象。 在js中,数据类型主要有:string、number、boolean、undefined、null、symbol和object。其中前6种是基本数据类型,最后种引用数据类型。注意喽,这里的英文表示全是小写。 这里注意个小细节,null也是基本类型,尽管typeof null时会返回字符串"object",但null本身还真就是基本...

一期一会的博客 298

JavaScript了解,js的插入

1为什么学习JavaScript 一、你知道,为什么JavaScript非常值得我们学习吗? 1. 所有主流浏览器都支持JavaScript。 2. 目前,全世界大部分网页都使用JavaScript。 3. 它可以让网页呈现各种动态效果。 4. 做为一个Web开发师,如果你想提供漂亮的网页、令用户满意的上网体验,JavaScript是必不可少的工具。 二

回忆 2044
上一篇: Node.js 入门
下一篇: Node.js 异步编程
mvpzx
博客等级 码龄10年 17粉丝 57原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值