一个程序的功能大致可以总结为:输入-》计算-》输出。
而要输入、输出、计算的东西就是数据。
数据,是指一切能够输入到计算机中的信息。不过无论输入的是文字、图片、音频还是什么,在底层都是二进制的,在表层的表现也就是数字。当然我们不会直接去处理二进制。
直接处理二进制是十分复杂的,因此,在JS中,数据分成了很多类型。主要就6种基本类型:string、boolean、number、null、undefined、object。我们可以通过typeof 数据的名字,来知道一个数据的类型,不过由于历史原因,null类型的数据会被错误地推断为object。
故名思议,上述分别代表字符串、布尔、数字、空、未定义、对象。
JS是弱类型的,但不是无类型的,所以它会根据值来自动推断数据类型。如果用引号(单引号、双引号、反引号)引起来的会被推断为字符串(string),数字会被推端为数字类型(number),其它类型之后再说。
常量和变量的声明
常量,即在运行过程中不可改变的数据;变量,即在运行过程中可以改变的数据。
常量有两种表示方式,一种是字面量,也就是直接写,比如3就代表数字3;还有一种就是取一个名字。
const 常量名
这样就声明了一个常量。
变量需要一个名字才能使用,因此我们就必须要取一个名字了,语法如下
var 变量名
或者
let 变量名
它们都可以声明变量,但它们是有区别的,这种区别我们以后再说。
常量或变量取名的过程称为声明。
如果一个常量或变量没有被赋值,那么它的默认值是undefined,它是undefined类型的,undefined类型只有undefined这一个值。同理null类型的值也只有null这一个值。null是专门用于对象类型的数据,值为null的对象,代表当前的对象是空的。
数据的赋值
如果定义了常量或变量直接使用一个等于号即可。例如
let price;
price=3;
也可以在声明时,直接使用等于号赋值。例如let num=3
。
需要注意的是,赋值使用的是一个等号,如果等号的数量多了,含义就会发生变化。
console.log方法可以传入多个参数,可以是任何类型的,每个不同的参数使用逗号隔开,控制台输出时会在每个参数中间加上空格。
表达式
在等号右侧,不仅可以是一个常量,也可以是一个变量或者一个表达式。
表达式,即由运算数和运算符组成的一个式子。操作数既可以是常量也可以是变量。
表达式有很多类型,最常见的就是算术表达式,也就是我们小学就开始学的四则运算。操作符加减乘除分别用+-*/代表。除此之外,还有一个模运算(%),模运算简单来说就是求余数。例如5%2=1,因为5除以2=2余1。
算术表达式中,也可以使用括号,结果是符合四则运算规律的。另外,在没有括号的情况下,模运算的优先级是最高的、其次是乘除、最后是加减。
【例2-1】用算术表达式计算1+2+3.
let sum=1+2+3;
BOM和DOM
BOM和DOM是浏览器环境下特有的内容,BOM是指和浏览器相关的东西、DOM是指和当前网页相关的东西。BOM中有很多特殊的对象,window就是其中之一,你声明的一些变量和方法/函数会变成window对象的一部分。
用var声明的会变成window对象的属性;而用const或let声明的则不会变成window对象的属性,这便是var和let的区别之一。
在NodeJS中,没有window对象,但是也有一个类似的叫做global的对象,同时为了让大家写代码时能够写相同的名称,就又有了一个叫做globalThis的对象,globalThis在浏览器中就是指window对象,在NodeJS中就是指global对象。
var和let还有一个区别就是var可以在之后重新声明,新声明的会覆盖原先声明的,而let不能重复声明。这是它们之间的区别之二。它们还有更多的区别。
document是DOM中的一个对象,同时它是也是window对象的一个属性。(对象的属性也可以是一个对象)。document有一个write方法,可以在网页上输出内容。在没有刷新网页的情况下,document的write方法,是会在上一次输出的后面输出新的内容,并且多个参数之间、多次使用该函数之间,均不会有换行和空格。
注释
注释,是不会被运行的文字。主要用于解释代码是用来做什么的,注释分为单行注释和多行注释。语法如下:
// 这是单行注释
/*
这是
多行
注释
*/
数据类型之间的转换
在一些情况下,数据类型会被隐式转换,但是我们也可以显示地转换数据类型。语法如下:
parseInt(常量或变量);
parseFloat(常量或变量);
常量名或变量名.toString();
以上三行分别会转换为整数、小数和字符串,前两行都可以是字面量或者数据的名称,但最后一行除了字符串可以是字面量之外,其它都不能是字面量。
前两行虽然分别是转换成整数或者小数,但是它们都是number类型的。
输入和输出
输出,在控制台输出就是使用console对象的log方法,在网页输出就是用document对象的write方法,这些前面已经介绍过了。当然还有其它的方法,这里暂时不做介绍。
输入,在JS中也是有很多方法,最常用的是获取网页中文本框的值,但是除此之外,我们也可以使用prompt弹出一个输入对话框来进行输入。但是无论如何,JS和DOM交互时,所有的数据都是会被转换成字符串类型进行处理的,所以在进行一些运算时需要进行类型的转换。
【例2-2】将输入的值赋值给变量num。
let num=prompt();
运行上述代码之后,会弹出一个对话框,输入一些东西,确定之后,输入的值就会被赋值给变量num,此时我们可以通过typeof num
看到它的类型是string类型的。
String和string是不同的,虽然都代表字符串,但是string是基本数据类型,typeof会返回string,而String是一个类,它的实例,typeof会返回object。
prompt方法可以传入一个参数,这个参数代表在对话框上要显示的内容。
【例2-3】输入两个数字,并计算它们的和。
let num1=prompt();
let num2=prompt();
let sum=parseFloat(num1)+parseFloat(num2);
console.log(sum);
如果在上述代码中,将第三行的类型转换删去,那么就会得到不正确的结果了。例如,输入3和5,在上述代码中会输出正确的结果8,而删除类型转换,就会输出错误的结果35了。