JavaScript 复习之数据类型

一、简介

JavaScript 的数据类型有 7 种:

  • 数值(number)
  • 字符串(string)
  • 布尔值(boolean)
  • undefined
  • null
  • 对象(object)
  • Symbol(ES6 中新增的类型,表示独一无二的值)

对象时复杂的数据类型,它有分为三个子类型:

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

二、typeof

JavaScript 中判断一个数据的类型,有三种方法:

  1. typeof 运算符
  2. instanceof 运算符
  3. Object.prototype.toString 方法

下面来介绍 typeof 运算符:

数据类型返回值
数值number
字符串string
布尔值boolean
nullobject
侠义的对象object
函数function
数组object
未声明的变量undefined

通过上面的介绍,这里说一个例子:

//错误写法
if(v){
    //....
}
// ReferenceError: v is not defined

//正确写法
if(typeof v === "undefined"){
    //....
}
复制代码

还有两种方法后边会继续介绍。

三、nulldundefinded

  1. 两者都表示“没有”。
  2. 在 if 语句中都会被自动转化为 false
  3. null表示空对象,转化数值时为0undefined表示无定义的值,转化数值时为NaN

四、布尔值

我们在做if...else判断时,会转化判断数据为truefalse。转换规则时除了下面六个值为false,其他都视为true

  1. undefined
  2. null
  3. 0
  4. "" 或 ''(空字符串)
  5. NaN
  6. false

五、数值

这里主要讲到NaNInfinity 和 数值相关函数

  • NaN

NaN 是 JavaScript 中的特殊数值,数据类型依然是 number。它不等于任何值,包括它本身。

typeof NaN //number
NaN === NaN //false
NaN.indexof(NaN) // -1
Boolean(NaN)// false
复制代码
  • Infinity
//`Infinity`表示无穷大。有正负之分。
//`0`乘以`Infinity`,返回`NaN`;0除以`Infinity`,返回`0`;`Infinity`除以`0`,返回`Infinity`。
//`Infinity`与`undefined`计算,返回的都是NaN。
//`Infinity`加上或乘以`Infinity`,返回的还是`Infinity`。
//`Infinity`与`null`计算时,`null`会转成`0`,等同于与0的计算。
复制代码
  • 与数值相关的全局方法
方法用法
parseInt()1. 用于把字符串转化为整数 2. 如果参数不是字符串,则会先转化为字符串在转换 3. 如果字符串的第一个字符不能转化为数字(正负号除外),返回NaN 4. 有两个参数,第二个参数代表按照规定进制转换
parseFloat()1. 用于将一个字符串转为浮点数 2. 如果参数不是字符串,或者字符串的第一个字符不能转化为浮点数,则返回NaN
isNaN()用来判断一个值是否为NaN,但是只对数值有效,如果传入其他值,会被先转化为数值。
isFinite()返回一个布尔值,表示值是否为正常数值。除了Infinity-InfinityNaNundefined返回false,对于其他数值都返回true

六、字符串

  • 字符串可以视为字符串数组,所以可以使用数组的方括号运算符,如果方括号中的数字超过字符串的长度,或者方括号中根本不是数字,则返回undefined。
  • length属性

七、对象

  • 如果不同的变量名指向同一个对象,那么他们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个,会影响到其他所有变量。
  • 属性的读取有两种方法,如读取p属性:obj.pobj['p']
  • 查看所有属性,可以用Object.keys()方法
  • 删除属性,使用delete命令,如删除 obj 的 p 属性 delete obj.p
  • 属性是否存在,使用 in 运算符
  • 属性的遍历,使用 for...in循环

with 语句: 它的作用是操作同一个对象的多个属性时,提供一些书写的方便。

// 例一
var obj = {
  p1: 1,
  p2: 2,
};
with (obj) {
  p1 = 4;
  p2 = 5;
}
// 等同于
obj.p1 = 4;
obj.p2 = 5;
复制代码

八、函数

  • 函数声明的三种方法:
  1. function 命令
function print(s) {
  console.log(s);
}
复制代码
  1. 函数表达式
var print = function(s) {
  console.log(s);
};
复制代码
  1. Function 构造函数
var add = new Function(
  'x',
  'y',
  'return x + y'
);

// 等同于
function add(x, y) {
  return x + y;
}
复制代码
  • 如果同一个函数被多次声明,后面的声明会覆盖前面的声明。
  • 函数可以调用自身,这就是递归(recursion)
  • JavaScript 引擎将函数名视为变量名,所以采用 function 命令声明函数时,整个函数会被提升到代码头部。
  • name 属性。length属性(返回函数预期传入的参数个数)
  • 函数的 toString()方法返回函数源码的字符串
  • 函数的作用域是指变量存在的范围,分为全局作用域和函数作用域。ES6中有新增了块级作用域。
  • 函数本身也是一个值,有自己的作用域,其访问变量只能访问到其所在作用域内的变量。同样的,函数体内部声明的函数,作用域绑定函数体内部。正是这种机制,构成了“闭包”现象。
var x = function () {
  console.log(a);
};

function y(f) {
  var a = 2;
  f();
}

y(x)
// ReferenceError: a is not defined
function foo() {
  var x = 1;
  function bar() {
    console.log(x);
  }
  return bar;
}

var x = 2;
var f = foo();
f() // 1
复制代码
  • 同名参数去后面的那个
  • arguements对象包含了函数运行时的所有参数,虽然很像数组,但是它是一个对象。
  • 闭包就是有权访问其他作用域变量的函数。作用有两个:一个是可以读取函数内部的变量,让变量一直保存在内存中;另一个时封装对象的私有属性和私有方法。

八、数组

  • 数组的本质就是一种特殊的对象。所以typeof运算符会返回object
  • in 运算符适用于对象,也适用于数组
  • for...in循环不仅可以遍历对象,也可以遍历数组
  • 如果一个对象的所有键名都是正整数或零,并且有length属性,那么这个对象就很像数组,语法上称为“类似数组的对象”(array-like object)。

转载于:https://juejin.im/post/5c71632f518825246b1044dc

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值