《大前端三问》 - JS中的数据类型、变量、函数
我们说程序=数据结构+算法
,这表明了数据结构
在一门语言中的重要性,他将是你所写的程序的主要构成。而变量是数据结构的载体,数据结构常常是一块特定结构的内存空间,而要引用这段内存空间,我们就需要操作变量
。因为JS是一门弱类型的语言,因此它的变量的概念有点像C中的指针或Java中的引用,表示其内容就是其指向的这段内存结构。
本章我们将先了解JavaScript中的数据类型,不同数据类型代表不同的意义、也占用不同的内存空间。再看看变量
,他如上面说的代表一份内存的载体,也代表着一个作用域。最后我们看下算法
,js中的控制流程与函数。
JavaScript 是一种多范式的动态语言,它包含类型、运算符、标准内置( built-in)对象和方法。它的语法来源于 Java 和 C,所以这两种语言的许多语法特性同样适用于 JavaScript。
JavaScript通过原型链而不是类来支持面向对象编程。但是在ES6中,JS类
的概念得到了完整的定义,这个后面会详细学习之。
1 JavaScript中的类型
JavaScript中的类型包括:
- Number(数字)
- String(字符串)
- Boolean(布尔)
true/false
- Function(函数)
- Object(对象)
- Function(函数 - 也因此JS支持函数式编程)
- Array(数组)
- Date(日期)
- RegExp(正则)
- 特殊
- undefine (未定义)
- null (空)
- NaN
- Symbol(ES2015 新增)
1.1 算术运算
JavaScript 支持标准的算术运算符,内置对象 Math(数学对象),用以处理更多的高级数学函数和常数:
1 | Math.sin(3.5); |
1.2 特殊值
NaN
表示Not a Number
,表示任何数字运算的错误,任何其它值与之计算也是NaN
1 | isNaN(value); // 用于判断一个值是不是NaN |
- 与其他类型不同,JavaScript 中的
null
表示一个空值(non-value),必须使用null
关键字才能访问,undefined
是一个“undefined(未定义)”类型的对象,表示一个未初始化的值.
体会一个这之间的不同与相同:一方面他们的本质相同,都是空;但是他们表示的意义不同,undefined
是变量未定义,而null
表示对象是空值。
1 | console.log(undefined == null); // true |
1.3 字符串
JavaScript中使用的字符串都是Unicode字符串
。更准确地说,它们是一串UTF-16
编码单元的序列,每一个编码单元由一个 16 位二进制数表示。每一个Unicode字符由一个或两个编码单元来表示。
1.4 数组
JavaScript 中的数组是一种特殊的对象。它的工作原理与普通对象类似(以数字为属性名,但只能通过[] 来访问),但数组还有一个特殊的属性——length(长度)属性。这个属性的值通常比数组最大索引大 1。
创建一个数据可以使用new
语句,也可以直接使用数组字面量语法:let arr = ['a', 'b', 'c']
。
关于数组元素可以使用访问时扩展这样的”骚操作”,如下面的示例:
1 | var a = new Array(); |
可以对数据用for-in
来遍历,或是用forEach
、map
等函数式的方法。
1 | arr.toString() // 返回一个包含数组中所有元素的字符串,每个元素通过逗号分隔。 |
2 变量
在 JavaScript 中声明一个新变量的方法是使用关键字 let 、const 和 var。
其中:
var
表示声明一个全局作用域的变量;const
表示声明一个不可变的常量;let
表示声明一个块级作用域的本地变量(local variable);
下面的例子可以很好地解释var
与let
的作用范围:
1 |
|
3 流程控制
搞懂变量之后,对之对简单的应用就是流程控制了。JS的流程控制与C语法基本上差不多,这里就不作过多介绍了。无非就是
1 | if - else |
3.1 短路逻辑
js中的短路逻辑还是挺好用的,就是对于含&&
或||
的逻辑表达式,是否会执行第二个语句(操作数)取决于第一个操作数的结果。也就是会在结果已定的情况下直接返回结果值。
比如:
1 | let receiveData = 'ok'; |
4 函数
1 | function add(a , b) { |
4.1 参数变量
函数中有一个特殊变量 – arguments
!表示传进来的参数!!!如下面的方法,可以传入一个数组,则arguments
就代表这个传入的数组
1 | function add() { |
4.2 默认参数
1 | // 参数可以设置默认值,如下: |
4.3 可变参数
可变参数...args
,表示传入的参数数量是可变的,js会自动将之组织成一个数组。
1 | function avg(...args) { |
又比如我们熟悉的log方法:
1 | log(message?: any, ...optionalParams: any[]) |
5 小节
本单相关函数
1 | parseInt('111',2); // 输出7, 后面一位表示“进制” |