当前位置: 首页 > 编程日记 > 正文

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

相关文章:

Nginx反代配置

一、ngx_http_proxy_module模块ngx_http_proxy_module模块可根据用户请求的uri传递至后端服务器,实现反向代理命令:1.proxy_pass设置一个代理服务器的地址,协议,和一个可选的URI的位置应该映射。作为一个协议,“HTTP”…

STL queue priority_queue

queue 队列 queue 队列 就像排队一样,后来的排在后面,先来的先出队。所以只能对队首和队尾的元素进行操作 back()返回最后一个元素empty()如果队列空则返回真front()返回第一个元素pop()删除第一个元素push()在末尾加入一个元素size()返回队列中元素的…

镜头评价指标及测试方法(二)—畸变与分辨率

一、畸变 畸变(distortion)也称为失真,是由于光阑球差的影响,不同视场的主光线通过光学系统后与高斯像面的交点高度不等于理想像高,两者之差就是畸变。因此畸变只改变轴外物点在理想面上的成像位置,使像的形…

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

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

sersync 同步

Sersync数据同步rsync是类unix系统下的数据镜像备份工具——remote sync。一款快速增量备份工具 Remote Sync,远程同步支持本地复制,或者与其他SSH、rsync主机同步。它的特性如下:v 可以镜像保存整个目录树和文件系统。v 可以很容易做到保持原…

python-opencv 形态学

五、形态学运算 检测边和 角点 形态学算子检测图像中的边缘和拐角(实际用:Canny或Harris等算法) 5.1 检测边缘 形态学检测边缘的原理:在膨胀时,图像中的物体会想周围“扩张”;腐蚀时,图像中的物…

【 HihoCoder】1082 The Marshtomp has seen it all before (暴力 或 脑力)

https://vjudge.net/problem/HihoCoder-1082 暴力 #include <iostream> #include <cstring>using namespace std;char s[205];int main() {int i;while(gets(s)){i 0;int len strlen(s);while(i<len){if((s[i]m||s[i]M)&&(s[i1]a||s[i1]A)&&am…

java 多维数组转化为字符串

int[][] a {{1,2,3},{4,5,7}};System.out.println(Arrays.deepToString(a)); Arrays.deepToString()此方法是为了将多维数组转换为字符串而设计的。 三维二维都可以解决;转载于:https://www.cnblogs.com/lishuaiqi/p/10428612.html

python-opencv 轮廓检测

轮廓检测 图像处理中经常用到轮廓检测,OpenCV-python接口中使用cv2.findContours()函数来查找检测物体的轮廓。 import cv2img cv2.imread(D:\\test\\contour.jpg) gray cv2.cvtColor(img,cv2.COLOR_BGR2GRAY) ret, binary cv2.threshold(gray,127,255,cv2.THRESH_BINARY)…

JavaDate类

在JDK1.0中&#xff0c;Date类是唯一的一个代表时间的类&#xff0c;但是由于Date类不便于实现国际化&#xff0c;所以从JDK1.1版本开始&#xff0c;推荐使用Calendar类进行时间和日期处理。这里简单介绍一下Date类的使用。1、使用Date类代表当前系统时间Date d new Date();Sy…

Jupyter Notebook使用教程

1、启动 在终端中输入以下命令&#xff1a; jupyter notebook --allow-root执行命令之后&#xff0c;在终端中将会显示一系列notebook的服务器信息&#xff0c;同时浏览器将会自动启动Jupyter Notebook。 启动过程中终端显示内容如下&#xff1a; $ jupyter notebook [I 08…

一次性理清JavaScript变量等高难度面试问题

主要是解决JavaScript中比较难懂的部分&#xff0c;当然了&#xff0c;这部分经常在面试题中露面&#xff0c;这篇文章主要是讲解解题思路&#xff0c;对新手会有很大帮助&#xff08;如果你仔细看的话&#xff09;。书籍方面&#xff0c;我看的是《你不知道的javascript》,精髓…

yolov3(一:模型训练)

第一部分&#xff1a;训练已有的voc datasets 搞清楚该算法的模型训练流程 Darknet是Joseph维护的开源的神经网络框架&#xff0c;使用C语言编写&#xff1a;https://pjreddie.com/darknet/yolo/ Darknet快速&#xff0c;易于安装&#xff0c;同时支持CPU和GPU计算&#xff1…

Ios生产证书申请(含推送证书)

一、Mac机上生成请求文件。 Mac机上点击证书助手 > 从证书颁发机构请求证书 > 得到CertificateSigningRequest.certSigningRequest请求文件&#xff08;此请求证书建议一直保存&#xff0c;因为根证书的生成需要使用此请求文件&#xff0c;根证书多个app可以使用一个&…

【Python】SyntaxError: unexpected EOF while parsing

找到错误的地方是 少打了半个括号 emmm 1、可能是语法问题&#xff0c;需要自己检查代码 2、可能是用python2.7来运行python3.0的代码不兼容

华为云家庭视频监控帮你一起守护家

设想一下&#xff1f;离开家了突然想起家里空调没关怎么办&#xff1f;家里没人有陌生人入侵了怎么办&#xff1f;不在家家里老人出事了怎么办&#xff1f; 不用愁&#xff0c;总有办法解决的&#xff0c;这些日常生活中极容易遇到的事情&#xff0c;没有分身术的时候&#xff…

SLAM之特征匹配(三)————RANSAC------LO-RANSAC Algorithm

matlab 编译loransac&#xff0c;lapack mex ranH.c时一直链接错误。 原来mex在编译多个文件时要把所有的C文件都列出来。命令如下&#xff1a; mex loransacH.mex.c ranH.c utools.c Htools.c lapwrap.c matutl.c rtools.c -ID:\lapack\headers\lapack -LD:\lapack - lcbia.l…

【Codeforces】1136C Nastya Is Transposing Matrices (矩阵转置)

http://codeforces.com/contest/1136/problem/C 第一个矩阵可否通过转置&#xff0c;变换成第二个矩阵&#xff0c;可以的话输出“YES”&#xff0c;不可以的话&#xff0c;输出“NO” 转置之后&#xff0c;对角线元素是不变的 用map&#xff0c;或者vector 都可以 #includ…

linux基础篇-02,linux时间管理date hwclock cal 简述

################################################时间管理1&#xff0c;date:系统时钟查看当前系统时间[rootJameszhan etc]# date2016年 11月 14日 星期一 20:16:37 CST################################################设定系统时间 2016年 07月 20日 星期三 10:30:00 CST…

Spark shuffle调优

Spark shuffle是什么Shuffle在Spark中即是把父RDD中的KV对按照Key重新分区&#xff0c;从而得到一个新的RDD。也就是说原本同属于父RDD同一个分区的数据需要进入到子RDD的不同的分区。现在的spark版本默认使用的是sortshuffle;shuffle在哪里产生shuffle在spark的算子中产生,也就…

多传感器融合之滤波(一)——卡尔曼滤波(KF)推导

c参考资料&#xff1a;https://www.bzarg.com/p/how-a-kalman-filter-works-in-pictures/ 卡尔曼滤波本质上是一个数据融合算法&#xff0c;将具有同样测量目的、来自不同传感器、(可能) 具有不同单位 (unit) 的数据融合在一起&#xff0c;得到一个更精确的目的测量值。 卡尔…

【HDU】1284 钱币兑换问题 (想一想)

http://acm.hdu.edu.cn/showproblem.php?pid1284 除以三&#xff0c;看最多能放多少个三分的硬币&#xff0c;加一表示全部都是一分的硬币着一种情况。之后用一个循环看一下&#xff0c;有多少种情况 因为确定了有几个三分&#xff0c;有几个两分&#xff0c;一分的也就自然…

抓取网页的脚本 【修复】

之前张耀老师的网页脚本由于51cto升级&#xff0c;课程列表页面改用javascript失效了笔者发现视频课程页面右边的列表都为静态化后的视频课程地址&#xff0c;遂将老师初始版本的脚本进行了修改&#xff0c;在对视频课程页面使用时结果正常&#xff0c;遂将及修改后的脚本和部分…

实例规格 ECS (共享计算型)和 (通用型-原独享)性能上有什么区别?...

实例规格 ECS (共享计算型)和 (通用型-原独享)性能上有什么区别? 实例规格 共享计算型 和 通用型(原独享), 如果同样是2核4G 或者4核8G ; 性能上有什么差异/差距大吗? 内存型比通用性性能好些&#xff0c;而且CPU和内存配比&#xff1a; 通用型为1&#xff1a;2&…

yolov3(二:车牌识别)

0.按照&#xff1a;https://blog.csdn.net/Darlingqiang/article/details/103889245步骤训练自己的模型 1.下载[data.zip]&#xff1a;链接: https://pan.baidu.com/s/1NahLmB5YajUJT_Gk1OgN7A 提取码: 8888 2.进入data/voc目录下运行voc_label.bat重新生成2019_train.txt, 201…

[转]CSS hack大全详解

转自&#xff1a;CSS hack大全&详解 1、什么是CSS hack?CSS hack是通过在CSS样式中加入一些特殊的符号&#xff0c;让不同的浏览器识别不同的符号&#xff08;什么样的浏览器识别什么样的符号是有标准的&#xff0c;CSS hack就是让你记住这个标准&#xff09;&#xff0c;…

【Python】打印魔方阵

1.将“1”放在第一行&#xff0c;中间一列&#xff1b; 2.从2开始至N*N各数按如下规律&#xff1a; 每一个数存放的行比上一个数的行减1&#xff1b; 每一个数存放的列比上一个数的列加1&#xff1b; 3.当一个数行为1&#xff0c;下一个数行为N; 4.当一个数列数为N,下一个…

读书笔记:《图解HTTP》第三章 HTTP报文

原文地址博客积累地址 HTTP报文的作用 HTTP报文时是HTTP进行请求和响应时用来交换信息的&#xff0c;可以理解它为搬东西的包裹&#xff0c;来搬运交换的信息报文流 HTTP报文在HTTP应用程序&#xff08;客户端、服务器、代理&#xff09;之间发送数据块&#xff0c;这些数据块以…

在Web.config或App.config中的添加自定义配置

.Net中的System.Configuration命名空间为我们在web.config或者app.config中自定义配置提供了完美的支持。最近看到一些项目中还在自定义xml文件做程序的配置&#xff0c;所以忍不住写一篇用系统自定义配置的随笔了。 如果你已经对自定义配置了如指掌&#xff0c;请忽略这篇文章…

yolov3(三:算法框架解析)

应用见&#xff1a; https://blog.csdn.net/Darlingqiang/article/details/103889245 https://blog.csdn.net/Darlingqiang/article/details/104040582 首先通过一些简单的应用实现去理解yolov3的网络框架&#xff0c;接着让我们开始对yolov3的网络框架解析之旅。 首先&…