JavaScript 复习之数据类型

news/2024/7/6 2:36:43

一、简介

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


http://lihuaxi.xjx100.cn/news/244555.html

相关文章

SpringRestTemplate用法详解

REST(RepresentationalState Transfer)是Roy Fielding 提出的一个描述互联系统架构风格的名词。REST定义了一组体系架构原则,您可以根据这些原则设计以系统资源为中心的Web 服务,包括使用不同语言编写的客户端如何通过 HTTP处理和…

PostgreSQL运维实战精讲之“postgresql源码安装”

一、下载地址wget https://ftp.postgresql.org/pub/source/v9.2.4/postgresql-9.2.4.tar.gz二、安装:#安装依赖包yuminstall -y perl-ExtUtils-Embed readline-devel zlib-devel pam-devellibxml2-devel libxslt-devel openldap-devel python-devel gcc-c openssl…

优秀Java程序员应该知道的20个实用开源库

一个优秀且经验丰富的Java开发人员的特点之一是对API的广泛了解,包括JDK和第三方库。我花了很多时间学习API,特别是在阅读Effective Java 3rd Edition之后,Joshua Bloch建议如何使用现有的API进行开发,而不是为常用的东西写新的代…

OpenLDAP自定义属性的启用

2019独角兽企业重金招聘Python工程师标准>>> # ucode# This multivalued field is used to record the values of the license or# registration plate associated with an individual.attributetype ( 2.16.840.1.113730.3.1.900 NAME ucode DESC user code …

在SpringBoot中使用Spring Session解决分布式会话共享问题

在SpringBoot中使用Spring Session解决分布式会话共享问题 问题描述: 每次当重启服务器时,都会导致会员平台中已登录的用户掉线。这是因为每个用户的会话信息及状态都是由session来保存的,而session对象是由服务器创建,并把sessio…

Linux堆内存管理深入分析(上)

Linux堆内存管理深入分析(上半部) 作者:走位阿里聚安全 0 前言 近年来,漏洞挖掘越来越火,各种漏洞挖掘、利用的分析文章层出不穷。从大方向来看,主要有基于栈溢出的漏洞利用和基于堆溢出的漏洞利用两种。国内关于栈溢出的资料相对…

BZOJ4245 : [ONTAK2015]OR-XOR

按位考虑&#xff0c;逐步确定答案。 设当前是第i位&#xff0c;求出第i位的前缀异或和。 若存在m个0且所有数字异或和为0&#xff0c;那么答案的这一位可以为0&#xff0c;并把所有1的位置给标记为不可选。 否则答案的这一位只能是1。 时间复杂度$O(n\log n)$。 #include<c…