当前位置: 首页 > 编程日记 > 正文

0基础JavaScript入门教程(一)认识代码

1. 环境:

JavaScript简称js,后续我们将使用js来代替JavaScript

认识代码前,需要安装js代码运行环境。

  • 安装nodejs:在https://nodejs.org/zh-cn/ 下载LTS版本,然后安装
  • 安装visual studio codehttps://code.visualstudio.com/ 下载安装
  • 注:本教程基于ES6标准

安装完成后,打开visual studio code后,软件右下角会建议你安装中文插件,直接点安装。

建立一个新js文件:hello.js,保存到你想保存的目录。

在文件中输入:

console.log('hello world')
复制代码

点击 visual studio code 上方菜单”调试-启动调试“,你将会在下方的调试窗口看到输出的'hello world'

后续我们会将 visual studio code 简称为 vscode

2. 输出:

现在你应该知道console.log的作用是在调试窗口输出一行文字。

3. 注释

注释的意思是,将代码中不需要运行的部分标记出来。注释一般用于代码说明,来告诉代码阅读者,代码的运行逻辑。

注释的写法有2种。

//单行注释/*
多
行
注
释
*/console.log('hello world');复制代码

上述代码运行结果,同之前的一样。

4. 变量和常量:

变量是代码运行的基本单位,代码中所有的最重要的元素都是由变量组成。

常量是一种特殊的变量,一旦声明,无法更改,无法被赋值。

let v = 12;//这是变量
const v1 = 'hello world';//这是常量
复制代码

变量有2种属性:类型和值。

4.1 变量的命名

变量名字规则如下:

  • 字母:A-Z
  • 数字:0-9
  • 下划线:_
  • $
  • 不能以数字开头

下面都是合法的变量:

let aaa;
let a123;
let a__;
let a_123;
let a$12_$;
let $23;
let $_a;
复制代码

下面是不合法的变量:

let 123;
let 1aa;
let +00;
let '';
let #$;
复制代码

4.1 变量的类型

不同的类型和值,代表变量的不同使用方法。

console.log('hello world');
//上面这行语句中:
//console是变量,类型是object
//log是变量,类型是function
//'hello world'是常量,类型是string
复制代码

js基本数据类型有5种,分别是:object, function, string, number, boolean

下面分别列出:

let obj = {}; //object类型
let func = function (){}; //function类型
let str = 'hi'; //string类型
let num = 123; //number类型
let b = true; //boolean类型//可以使用typeof函数来输出变量的类型
console.log(typeof(obj))//输出:object
console.log(typeof(func))//输出:function
console.log(typeof(str))//输出:string
console.log(typeof(num))//输出:number
console.log(typeof(b))//输出:boolean复制代码

除上述类型外,js中还包含一个特殊变量:undefined。这个变量表示变量没有初始化。下面来对比一下:

let a = 123;//声明了一个变量a,并且初始化为123
let b;//声明了一个变量b,没有初始化
console.log(a);//输出123
console.log(b);//输出undefined
复制代码

注意:undefined在同其他变量进行计算的时候,有时候虽然不会报错,但是不建议依赖默认值。所以声明变量一定要初始化。

4.1.1 数组

其实除了上面的类型外,还有一个特殊类型,就是数组。

数组是多个变量的合在一起组成了一种新的数据类型。一般用来表示一堆相似的数据。比如:一班级的学生,一群小动物,一家人等等。

let students = [1,2,3,4];//4个学生,编号分别为1,2,3,4
let animals = [1,2,3,4];//4个动物,编号分别为1,2,3,4
let familys = [1,2,3,4];//4个家庭成员,编号分别为1,2,3,4console.log(students[0]);//输出:1
console.log(students[1]);//输出:2
console.log(students[2]);//输出:3
console.log(students[3]);//输出:4
复制代码

数组的值是要用 [] 来包含的,数组内部的值可以用变量或常量或表达式表示,并使用 , 分割。

如果想获取数组的元素,可以使用:数组名[下标值]的形式获取。

下标值从0开始计,比如:数组第一个元素为 数组名[0],第二个元素为 数组名[1] ...

4.2 变量的值

let obj = {}; //object类型
let func = function (){}; //function类型
let str = 'hi'; //string类型
let num = 123; //number类型
let b = true; //boolean类型
let arr = []; //object类型//在上一节这个例子中,每个变量都是有值的。
//obj这个变量的值是:{}
//func这个变量的值是: function(){}
//str这个变量的值是:'hi'
//num这个变量的值是:123
//b这个变量的值是:true
//arr这个变量的值是: []
复制代码

可以看出,要给一个变量赋值,需要使用 =

我们可以用 = 改变一个变量的值。

let num = 123;//变量的值是123
num = 234;//变量的值是234。
//注意只有声明的时候才需要在变量前加let关键字。
//而且变量不能重复声明。
let num = 344;//报错,num这个变量已经在上面声明过了。
复制代码

4.3 关键字

上文中提到了关键字,什么是关键字呢?

关键字是js语言中,为了规范代码编写规则,添加的一系列固定的单词。这些单词必须以固定的形式出现,每个关键字都表示不同的含义。

在代码中,除去变量,常量和注释,操作符以及括号,剩余的部分就是关键字。

常用关键字如下:

let
const
function
new
for
if
else
switch
break
continue
class
extends
constructor
this
super
...
复制代码

现在不需要知道每个关键字是什么意思,只知道有关键字这个概念就行。

最重要的一点是,不要给你的变量命名同关键字一样。

let let;//错误
let function;//错误
let switch;//错误
复制代码

4.4 函数

函数是为了更方便地控制程序结构,同时让程序更加容易编写,容易阅读而添加的概念。

函数能够将多条语句封装成一个整体来执行。

let obj = {}; //object类型
let func = function (){}; //function类型
let str = 'hi'; //string类型
let num = 123; //number类型
let b = true; //boolean类型console.log(typeof(obj))//输出:object
console.log(typeof(func))//输出:function
console.log(typeof(str))//输出:string
console.log(typeof(num))//输出:number
console.log(typeof(b))//输出:boolean//上面的代码,封装成函数可以这样编写function printType(val) {console.log(typeof(val));
}printType(obj);
printType(func);
printType(str);
printType(num);
printType(b);复制代码

运行一下,上下2部分的运行结果是相同的。

可以看出,封装成函数后,执行结果是相同的。

而好处显而易见。

  • 消除了很多重复代码:console.log和typeof,使代码更容易编写。
  • 通过printType的名字,我们可以判断出,这个函数的用途,它应该是打印类型的一个函数,这样使代码更容易阅读。

函数声明的写法是固定的:

function 函数名(参数名1, 参数名2 ...) {

//你的函数内部语句

return ...;

}

调用方式也是固定的:

函数名(参数1,参数2);

函数可以有返回值,用return表示。return 后面是一个变量或者一个表达式。

一旦一个函数添加了return,那么当调用它的时候,这个函数调用就能够像变量一样使用。

function returnInt(){return 123;
}let a = returnInt();console.log(a);//输出 123复制代码

5. 运算符

只有变量是不够的,为了能够计算赋值,形成逻辑,js定义了一系列运算符,这些运算符将变量和常量连接在一起,形成了不同的计算过程,和逻辑代码。

上文已经介绍了 = 这个运算符,它的作用是给一个变量赋值。

现在我们介绍一些其他一些简单的运算符。

let a = 1 + 2;
let b = 3 * 4;
let c = 5 - 2;
let d = 6 / 3;console.log(a);//输出3
console.log(b);//输出12
console.log(c);//输出3
console.log(d);//输出2
复制代码

没错就是你熟悉的 +(加法) -(减法) *(乘法) /(除法)。

上述代码,会计算等号右侧的四则运算,然后将结果赋给左侧的变量。

一些常用的运算符如下:

+
-
*
/
%
>
<
=
==
&&
||
!
()
++
+=
*=
/=
-=
%=
...
复制代码

现在你不需要了解所有运算符的含义,你只需要了解运算符是用来连接变量的,并且会一些简单的四则运算就好了。

6. 表达式

如上文所述,表达式就是:将变量使用运算符连接起来之后形成的复杂语句。

表达式出现的位置和变量相同。也就是说,能够出现变量的地方,就能出现表达式。

有一点例外,就是表达式不能出现在 = 的左侧,也就是说不能给表达式赋值。你可以认为表达式出现的位置和常量相同。

let a = 1 + 2 * 3;
let b = (1 + 2) * 3;
let c = a + b;
let d = c * a;
let e = c == d;
//上述语句 ‘=’ 右侧的都是表达式
复制代码

上面介绍的数组取值也可以认为是一个表达式:students[0]。

7. 总结

经过上面的介绍,现在给你一个程序,你应该能知道程序的每个单词分别是什么元素了。

那我们练习一下,为下列程序的每一行添加注释,说明一下这行包含什么元素。

也可以将代码copy到vscode中,运行一下看看是什么结果。


function max(a, b){if(a > b) {return a;}else{return b;}
}function sort(arr) {for(let i = arr.length - 1; i >= 0; i--) {for(let j = i - 1; j >= 0; j--) {if(i > 0 && arr[i] != max(arr[i], arr[j])) {let tmp = arr[i];arr[i] = arr[j];arr[j] = tmp;}}}
}let arr = [9,4,1,3,6,5,7,8,2];sort(arr);console.log(...arr);复制代码

相关文章:

junit、hamcrest、eclemma的安装与使用

1、junit的安装与使用 1.1 安装步骤 1&#xff09;从http://www.junit.org/ 下载junit相应的jar包&#xff1b; 2&#xff09; 在CLASSPATH中加入JAR包所在的路径&#xff0c;如E:\Java\jar\junit\junit-4.10.jar&#xff1b; 3&#xff09; 将junit-4.10.jar加入到项目的lib文…

如何撰写将赢得客户青睐的自由职业者提案和免费模板

Your prospective client asks you to provide them with a quote. So you just send them the quote, right?您的潜在客户要求您提供报价。 所以您只给他们发送报价吧&#xff1f; Wrong.错误。 If you did, you would be missing out on a massive opportunity here.如果这…

2. 把一幅图像进行平移。

实验二 #include "cv.h" #include<stdio.h> #include "highgui.h" IplImage *PingYi(IplImage *src, int h0, int w0); int main(int argc, char** argv) {IplImage* pImg; //声明IplImage指针IplImage* pImgAfterMove;pImg cvLoadImage("601…

后台的代理nginx部署方法

软件包如下&#xff1a;nginx-1.10.0.tar.gznginx-http-concat-master.zipngx_cache_purge-2.3.tar.gzopenssl-1.0.2h.tar.gzpcre-8.39.tar.gzzlib-1.2.8.tar.gz ngin部署方法&#xff1a;上面的安装包都存放在/apps/svr/soft目录下:cd /apps/svr/softtar -zxf nginx-1.10.0.ta…

iOS中你可能没有完全弄清楚的(一)synthesize

1. 什么是synthesize synthesize中文意思是合成&#xff0c;代码中我们经常这样用。 interface Test: NSObject property (nonatomic, unsafe_unretained) int i; endimplementation Test synthesize i; end 复制代码 使用synthesize的2个步骤&#xff1a; 首先你要有在类声…

framer x使用教程_如何使用Framer Motion将交互式动画和页面过渡添加到Next.js Web应用程序

framer x使用教程The web is vast and its full of static websites and apps. But just because those apps are static, it doesnt mean they have to be boring. 网络非常庞大&#xff0c;到处都是静态的网站和应用。 但是&#xff0c;仅仅因为这些应用程序是静态的&#xf…

POJ 2429

思路&#xff1a;a/n*b/nlcm/gcd 所以这道题就是分解ans.dfs枚举每种素数情况。套Miller_Rabin和pollard_rho模板 1 //#pragma comment(linker, "/STACK:167772160")//手动扩栈~~~~hdu 用c交2 #include<cstdio>3 #include<cstring>4 #include<cstdlib…

iOS中你可能没有完全弄清楚的(二)自己实现一个KVO源码及解析

前几天写了一篇blog&#xff08;点这里&#xff09;&#xff0c;分析了系统KVO可能的实现方式。并添加了简单代码验证。 既然系统KVO不好用&#xff0c;我们完全可以根据之前的思路&#xff0c;再造一个可以在项目中使用的KVO的轮子。 代码已经上传到github: https://github.…

js中的preventDefault与stopPropagation详解

1. preventDefault: 比如<a href"http://www.baidu.com">百度</a>,这是html中最基础的东西&#xff0c;起的作用就是点击百度链接到http://www.baidu.com,这是属于<a>标签的默认行为;preventDefault方法就是可以阻止它的默认行为的发生而发生其他…

angular过滤字符_如何使用Angular和Azure计算机视觉创建光学字符读取器

angular过滤字符介绍 (Introduction) In this article, we will create an optical character recognition (OCR) application using Angular and the Azure Computer Vision Cognitive Service. 在本文中&#xff0c;我们将使用Angular和Azure计算机视觉认知服务创建一个光学字…

javascript函数全解

0.0 概述 本文总结了js中函数相关的大部分用法&#xff0c;对函数用法不是特别清晰的同学可以了解一下。 1.0 简介 同其他语言不同的是&#xff0c;js中的函数有2种含义。 普通函数&#xff1a;同其他语言的函数一样&#xff0c;是用于封装语句块&#xff0c;执行多行语句的…

MYSQL explain详解[转载]

explain显示了mysql如何使用索引来处理select语句以及连接表。可以帮助选择更好的索引和写出更优化的查询语句。 虽然这篇文章我写的很长&#xff0c;但看起来真的不会困啊&#xff0c;真的都是干货啊&#xff01;&#xff01;&#xff01;&#xff01; 先解析一条sql语句&…

CodeForces 157A Game Outcome

A. Game Outcometime limit per test2 secondsmemory limit per test256 megabytesinputstandard inputoutputstandard outputSherlock Holmes and Dr. Watson played some game on a checkered board n  n in size. During the game they put numbers on the boards squares…

我使用Python和Django在自己的网站上建立了一个会员专区。 这是我学到的东西。

I decided it was time to upgrade my personal website in order to allow visitors to buy and access my courses through a new portal. 我认为是时候升级我的个人网站了&#xff0c;以允许访问者通过新的门户购买和访问我的课程 。 Specifically, I wanted a place for v…

详解AFNetworking的HTTPS模块

0.0 简述 文章内容包括&#xff1a; AFNetworking简介ATS和HTTPS介绍AF中的证书验证介绍如何创建服务端和客户端自签名证书如何创建简单的https服务器对CA正式证书和自签名证书的各种情况进行代码验证 文中所涉及的文件和脚本代码请看这里。 1.0 AFNetworking简介 AFNetwo…

字符串专题:map POJ 1002

第一次用到是在‘校内赛总结’扫地那道题里面&#xff0c;大同小异 map<string,int>str 可以专用做做字符串的匹配之类的处理 string donser; str [donser] 自动存donser到map并且值加一&#xff0c;如果发现重复元素不新建直接加一&#xff0c; map第一个参数是key&…

【洛谷P1508】吃吃吃

题目背景 问世间&#xff0c;青春期为何物&#xff1f; 答曰&#xff1a;“甲亢&#xff0c;甲亢&#xff0c;再甲亢&#xff1b;挨饿&#xff0c;挨饿&#xff0c;再挨饿&#xff01;” 题目描述 正处在某一特定时期之中的李大水牛由于消化系统比较发达&#xff0c;最近一直处…

前端和后端开发人员比例_前端开发人员vs后端开发人员–实践中的定义和含义

前端和后端开发人员比例Websites and applications are complex! Buttons and images are just the tip of the iceberg. With this kind of complexity, you need people to manage it, but which parts are the front end developers and back end developers responsible fo…

Linux 创建子进程执行任务

Linux 操作系统紧紧依赖进程创建来满足用户的需求。例如&#xff0c;只要用户输入一条命令&#xff0c;shell 进程就创建一个新进程&#xff0c;新进程运行 shell 的另一个拷贝并执行用户输入的命令。Linux 系统中通过 fork/vfork 系统调用来创建新进程。本文将介绍如何使用 fo…

metasploit-smb扫描获取系统信息

1.msfconsle 2.use auxiliary/scanner/smb/smb_version 3. msf auxiliary(smb_version) > set RHOSTS 172.16.62.1-200RHOSTS > 172.16.62.1-200msf auxiliary(smb_version) > set THREADS 100THREADS > 100msf auxiliary(smb_version) > run 4.扫描结果&#x…

算法(1)斐波那契数列

1.0 问题描述 实现斐波那契数列&#xff0c;求第N项的值 2.0 问题分析 斐波那契数列最简单的方法是使用递归&#xff0c;递归和查表法同时使用&#xff0c;可以降低复杂度。根据数列特点&#xff0c;同时进行计算的数值其实只有3个&#xff0c;所以可以使用3个变量循环递进计…

主键SQL教程–如何在数据库中定义主键

Every great story starts with an identity crisis. Luke, the great Jedi Master, begins unsure - "Who am I?" - and how could I be anyone important? It takes Yoda, the one with the Force, to teach him how to harness his powers.每个伟大的故事都始于…

算法(2)KMP算法

1.0 问题描述 实现KMP算法查找字符串。 2.0 问题分析 “KMP算法”是对字符串查找“简单算法”的优化。字符串查找“简单算法”是源字符串每个字符分别使用匹配串进行匹配&#xff0c;一旦失配&#xff0c;模式串下标归0&#xff0c;源字符串下标加1。可以很容易计算字符串查…

告别无止境的增删改查:Java代码生成器

对于一个比较大的业务系统&#xff0c;我们总是无止境的增加&#xff0c;删除&#xff0c;修改&#xff0c;粘贴&#xff0c;复制&#xff0c;想想总让人产生一种抗拒的心里。那有什么办法可以在正常的开发进度下自动生成一些类&#xff0c;配置文件&#xff0c;或者接口呢&…

Maven国内源设置 - OSChina国内源失效了,别更新了

Maven国内源设置 - OSChina国内源失效了&#xff0c;别更新了 原文&#xff1a;http://blog.csdn.net/chwshuang/article/details/52198932 最近在写一个Spring4.x SpringMVCMybatis零配置的文章&#xff0c;使用的源配的是公司的私有仓库&#xff0c;但是为了让其他人能够通过…

如何使用Next.js创建动态的Rick and Morty Wiki Web App

Building web apps with dynamic APIs and server side rendering are a way to give people a great experience both with content and speed. How can we use Next.js to easily build those apps?使用动态API和服务器端渲染来构建Web应用程序是一种使人们在内容和速度上都…

安装部署Spark 1.x Standalone模式集群

Configuration spark-env.sh HADOOP_CONF_DIR/opt/data02/hadoop-2.6.0-cdh5.4.0/etc/hadoop JAVA_HOME/opt/modules/jdk1.7.0_67 SCALA_HOME/opt/modules/scala-2.10.4 ####################################################### #主节点 …

算法(3)简单四则运算

1.0 问题描述 实现10以内四则运算&#xff08;只包含数字&#xff0c;*/和小括号&#xff09; 2.0 问题分析 四则运算使用“后缀表达式”算法来计算&#xff0c;后缀表达式可以无需考虑运算符优先级&#xff0c;直接从左至右依次计算。问题分解成2部分&#xff0c;一是将“中…

调用短信接口,先var_dump()看数据类型是object需要json_decode(json_encode( $resp),true)转换成array...

返回的数据.先看类型,如果是object类型 先json_encode, 再json_decode,加true 转换成数组 $resp $c->execute($req); var_dump($resp); object(stdClass)#12 (2) { ["result"]> object(stdClass)#13 (3) { ["err_code"]> string(1) "0"…

nlp文本数据增强_如何使用Texthero为您的NLP项目准备基于文本的数据集

nlp文本数据增强Natural Language Processing (NLP) is one of the most important fields of study and research in today’s world. It has many applications in the business sector such as chatbots, sentiment analysis, and document classification.Preprocessing an…