[ 前端基础知识学习 ] Day 5

学习目标:

  • 学习JavaScript基础知识

学习内容:

JavaScript的数据类型


学习产出:

1.变量提升

JavaScript 引擎的工作方式是,先解析代码,获取所有被声明的变量,然后再一行一行地运行。这造成的结果,就是所有的变量的声明语句,都会被提升到代码的头部,这就叫做变量提升(hoisting)。

2.数据类型

2.1 null 、undefined、布尔值

null是一个表示“空”的对象,转为数值时为0;undefined是一个表示“此处无定义”的原始值,转为数值时为NaN。
布尔值就两个值:true和false,除了null, undefined, 0, NaN, false, ‘’, ""在预期为布尔值的位置上会被转换成false外,其他全部转换成true。

2.2 数值

JavaScript 语言的底层根本没有整数,所有数字都是小数(64位浮点数)。

  • parseInt方法用于将字符串转为整数
  • parseFloat方法用于将字符串转为浮点数
  • isNaN方法可以用来判断一个值是否为NaN
  • isFinite方法返回一个布尔值,表示某个值是否为正常的数值

2.3 字符串

就记一个length属性得了

2.4 对象

  • 对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合
  • 对象的所有键名都是字符串(ES6 又引入了 Symbol 值也可以作为键名)
  • 属性可以动态创建,不必在对象声明时就指定
  • 如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量
  • 属性的读取或赋值都可以使用点(.)或者方括号([ ])
  • 属性的查看用key,删除用delete, 是否存在用in,遍历用for…in

2.5 函数

  • 声明function
  • 存在函数名提升
  • name:返回函数名,length:返回函数预期传入的参数个数,toString():返回函数源码
  • 函数执行时所在的作用域,是定义时的作用域,而不是调用时所在的作用域
  • 函数参数如果是原始类型的值(数值、字符串、布尔值),传递方式是传值传递(passes by value),也就是说在函数里面改值是不会影响外面的变量的值的;但是如果是复合类型的值(数组、对象、其他函数),传入函数的原始值的地址,因此在函数内部修改参数,将会影响到原始值。
  • 同名参数取最后
  • ⭐ 闭包

    • 封装对象的私有属性和私有方法
    • 可以让函数外部读取函数内部的值
    • 记录下函数被创建的状态
  • 立即调用的函数表达式
    • var f = function f(){ return 1}();

2.6 数组

  • 特殊的对象,所以对象有的它都有
  • 除了for…in可以遍历之外,还有forEach
  • 遍历不会跳过数组的空位