进阶篇:JS入门 (2)

饥人谷学习进阶第 2 天

JS基本概念

  • 语句:
    为了完成某种任务而进行的操作
    表达式:
    一个为了得到返回值的计算式,JS语句中,预期为值的地方都可以用表达式。
    区别:
    前者主要为了进行某种操作,一般情况下不需要返回值;后者则是为了得到返回值,一定会返回一个值。

  • 变量:
    变量是对值得引用,使用变量等同于引用一个值。每一个变量都有一个变量名。
    变量的声明和赋值
    变量的提升:
    JavaScript引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升

  • 标识符
    标识符(identifier)是用来识别具体对象的一个名称。最常见的标识符就是变量名,以及后面要提到的函数名。JavaScript语言的标识符对大小写敏感,所以a和A是两个不同的标识符。
    命名规则:
    第一个字符,可以是任意Unicode字母(包括英文字母和其他语言的字母),以及美元符号($)和下划线(_)。
    第二个字符及后面的字符,除了Unicode字母、美元符号和下划线,还可以用数字0-9。

中文是合法的标识符,可以用作变量名。
JavaScript有一些保留字,不能用作标识符:arguments、break、case、catch、class、const、continue、debugger、default、delete、do、else、enum、eval、export、extends、false、finally、for、function、if、implements、import、in、instanceof、interface、let、new、null、package、private、protected、public、return、static、super、switch、this、throw、true、try、typeof、var、void、while、with、yield。
另外,还有三个词虽然不是保留字,但是因为具有特别含义,也不应该用作标识符:Infinity、NaN、undefined。

  • 注释
    源码中被JavaScript引擎忽略的部分就叫做注释,它的作用是对代码进行解释。Javascript提供两种注释:一种是单行注释,用//起头;另一种是多行注释,放在/* 和 */之间。由于历史上JavaScript兼容HTML代码的注释,所以也被视为单行注释。
  • 区块
    JavaScript使用大括号,将多个相关的语句组合在一起,称为“区块”(block)。
    与大多数编程语言不一样,JavaScript的区块不构成单独的作用域(scope)。也就是说,区块中的变量与区块外的变量,属于同一个作用域。

数据类型

JavaScript 语言的每一个值,都属于某一种数据类型。JavaScript 的数据类型,共有六种。(ES6 又新增了第七种 Symbol 类型的值)

  • 数值(number):整数和小数
  • 字符串(string):字符组成的文本
  • 布尔值(boolean):truefalse 两个特定值
  • undefined:表示未定义或不存在,即由于目前没有定义,所以此处暂时没有任何值
  • null:表示无值,此处的值就是“无”的状态
  • 对象(object):各种值组成的几何

通常,将数值、字符串、布尔值称为原始类型(primitive type)的值,即它们是最基本的数据类型;将对象称为合成类型(complex type)/引用类型的值,因为一个对象往往是多个原始类型的值的合成,可以看作是一个存放各种值的容器。至于 undefinednull,一般将它们看成两个特殊值。

对象可以分成三个子类型:

  • 狭义的对象(object)
  • 数组(array)
  • 函数(function)

typeof运算符

JavaScript有三种方法,可以确定一个值到底是什么类型。

  • typeof运算符
  • instanceof运算符
  • Object.prototype.toString方法

原始类型和函数返回其所对应的英文名称

特别:
undefined返回undefined

利用这一点,typeof可以用来检查一个没有声明的变量,而不报错。
变量v没有用var命令声明,直接使用就会报错。但是,放在typeof后面,就不报错了,而是返回undefined

除了上述的:(其他情况都返回 object

typeof window // 
"object"
typeof {} // 
"object"
typeof [] // 空数组
"object"
typeof null // 
"object"

typeof对数组(array)和对象(object)的显示结果都是object,可以用 instanceof 运算符区分

布尔值

布尔值代表“真”和“假”两个状态。“真”用关键字 true 表示,“假”用关键字 false 表示。布尔值只有这两个值。

下列运算符会返回布尔值:

  • 两元逻辑运算符: && (And),|| (Or)
  • 前置逻辑运算符: ! (Not)
  • 相等运算符:===,!==,==,!=
  • 比较运算符:>,>=,<,<=

如果JavaScript预期某个位置应该是布尔值,会将该位置上现有的值自动转为布尔值。转换规则是除了下面六个值被转为 false,其他值都视为 true

  • undefined
  • null
  • false
  • 0
  • NaN
  • ""''(空字符串)

布尔值往往用于程序流程控制
例如:

if ('') {
  console.log(true);
}
// 没有任何输出

if命令后面的判断条件,预期应该是一个布尔值,所以JavaScript自动将空字符串,转为布尔值 false ,导致程序不会进入代码块,所以没有任何输出。

需要特别注意的是,空数组([])和空对象({})对应的布尔值,都是 true

if ([]) {
  console.log(true);
}
// true

if ({}) {
  console.log(true);
}
// true

你可能感兴趣的:(进阶篇:JS入门 (2))