【笔记】JS数据类型总结
JavaScript有六种数据类型,分别为undefined、null、number、string、Boolean、object,前面的五种是基础数据类型,也称之为原始类型,也就是无法再细分的基本类型,object则是复杂数据类型,其中通常是不止一种数据类型,除此之外在ES6当中又新增加了一种symbol,表示为唯一的值,这个还没有搞懂暂时涉及。
undefined:表示还没有定义
null:表示为'空'
number:整数或者小数
string:字符串文本
boolean:布尔值,true或者false
object:表示一个对象,键值对
Undefined与Null
1.当你通过var声明一个变量并且没有对这个变量进行初始化的时候,那么该变量的数值默认为undefined
var a;
console.log(a);// undefined
此外当你调用函数的时候没有返回值的时候也会默认返回一个undefined
function fn() {}
console.log(fn()); // undefined
2.未声明和未初始化还是有区别的,如下,a未初始化,b则是未声明,系统会报错
var a;
console.log(a);// undefined
console.log(b);// ReferenceError: b is not defined
3.null表示一个空对象的指针,假如你定义一个变量未来将用于存放对象,最好初始化为null
var a = null;
undefined与null的区别在哪里呢?
我们可以这样理解,null表示为有内容,而这个内容就是为空,而undefined表示的为未定义,还没有想好要放什么,假设我们面前放着这一张纸张想要画画,如果使用null,意思就是这张纸的画面就是一片空白(艺术!艺术!),而如果使用了undefined则是我放着这一张纸,但是还没想好画什么呢,就先这样放着吧。
但是如果你使用==
来进行对比你会发现返回一个true
,并且在if
语句的()
当中两者都会被转换成false
.
Boolean
布尔值只有两个值:true
表示真false
表示假,区分大小写,通常以下情况下会出现布尔值,
逻辑运算符: &&、||、!
运输符: 、!=、=、!==、>、>=、<、<=
if语句的()当中自动转化为boolean值
此外还可以使用Boolean()
来进行转换,除了undefined、null、false、0、NaN、""或''(空字符串)
会被转化为false
之外,其余都会被转换为truw
。
Number
1.JavaScript的所有数字都是以64位浮点数形式储存,由于二进制浮点数的算法原因,我们还能看到以下情况
console.log(0.1 + 0.2 ); // false
实际得到的数值是略微大于0.3的,具体可以看这里
2.除了十进制外还可以表示为八进制、十六进制、二进制
// 八进制:有前缀0的数值,或者有前导0、且只有0-7
var num8 = 070; // 56
// 十六进制:有前缀0x或0X的数值,有且只有0-9,a-f
var num16 = 0X3e; // 62
// 二进制:有前缀0b或0B的数值,有且只有0,1
var num2 = 0B10; // 2
3.number还可以使用科学计数法进行表示
console.log(3e13); // 30000000000000
console.log(3e-3); // 0.003
4.JavaScript的Number对象提供可以表示的最大最小是
Number.MAX_VALUE // 1.7976931348623157e+308 2的1024次方
Number.MIN_VALUE // 5e-324 2的-1023次方
当你超过之后就会发生溢出,编程Inifinity,如果为负数则是-Inifinity,
5.NaN表示为非数值,当本来要返回数值的操作未返回数值的情况,例如数字同字符串的-
console.log('a' - 10); // NaN
当然要是使用+
就不会返回NaN,因为会转化为字符串。
console.log('a' + 10); // a10
任何同NaN的操作都会返回NaN
console.log(NaN + 10); // NaN
并且NaN同任何值都不相等,包括自身。
console.log(NaN === NaN); // false
6.+0与-0
两者通常情况下都是相等的,除了作为分母的时候
console.log((1 / +0) === (1 / -0)); // false
7.与数值相关的全局方法有
parseInt():用于将字符串转化为整数
parseFloat():转换为浮点数
isNaN():是否为非数值
isFinite():是否为正常数值
具体转化规则行查询文档,这里需要注意的是parseInt()有第二个参数,表示的是被解析字符串的进制
parseInt('1000', 2) // 8
parseInt('1000', 8) // 512
String
1.字符串通常用""
,''
表示,可以在单引号当中放双引号,反过来也可以,需要注意的是开头结尾要相同
console.log('a string"); // 报错 nvalid or unexpected token
2.有一些特殊字符不可以直接在字符串当中打出来,需要通过转义符\
才行
\0 :null(\u0000)
\b :后退键(\u0008)
\f :换页符(\u000C)
\n :换行符(\u000A)
\r :回车键(\u000D)
\t :制表符(\u0009)
\v :垂直制表符(\u000B)
' :单引号(\u0027)
" :双引号(\u0022)
\ :反斜杠(\u005C)
3.当字符串被创建后就不可变(包括数组的length也是不可变),要改变内容只能先销毁先前的内容。
var lang = 'java';
lang = lang + 'script';
上面操作并不是直接在原来的数组直接拼接script
字符串,而是创建一个新的字符串,然后填充javascript
之后销毁先前的两个字符串。
4.字符串可以使用数组方括号方式读取
var str = 'this is a string';
console.log(str[0]); // t
5.toString()数值、布尔值、对象、字符串都有这个方法,详情看MDN文档
object
1.对象简单讲就是键对值
的集合,其中可以包含多种数据类型,包括嵌套对象
var obj = {
num: 123,
str: 'javascript',
bool: false,
otherObj: {}
}
2.对象是引用类型,也就是说上面的obj实际上存放的是某个对象的地址,因此,当另一个对象直接等于obj的时候,实际上复制的是对象的地址,因此无论哪个修改都会影响到另一个对象,属于浅拷贝。
var obj1 = {a: 1}
var obj2 = obj1;
obj2.a = 3;
console.log(obj1.a); // 3
3.属性的读取和设置可以使用.
点操作符或者[]
,数字键名不能用.
读取,还需要注意的是方括号当中属性名需要用""
包裹
var obj = {
1: 666,
'a_b': 777
}
console.log(obj.1); // 报错
console.log(obj[1]); // 666
console.log(obj[a_b]); // 报错
console.log(obj['a_b']); // 777
属性的删除则是使用delete
delete obj.1;
4.想要知道对象当中是否存在某个属性可以使用in
,返回一个布尔值
var obj = {a: 1};
'a' in obj // true
使用for in
可以遍历对象全部属性
for (var i in obj) {
console.log(i);
}
使用这两个的时候为了避免遍历到继承的属性和方法,应当使用hasOwnProperty()
先进行判断是否为对象本身的属性方法。
for (var i in obj) {
if (object.hasOwnProperty(i)) {
// ...
}
}
5.对象实例常用属性和方法
constructor: 指向构造函数的指针
hasOwnProperty(): 判断是否对象本身的属性
toString():返回对象的字符串表示。
valueOf():返回对象的字符串、数值或布尔值表示。
typeof与instanceof
typeof可以用来确定数据类型
console.log(typeof 'str'); // string
console.log(typeof 123); // number
console.log(typeof true); // boolean
console.log(typeof undefined); // undefined
function fn(){};
console.log(typeof fn); // function
console.log(typeof null); // object
可以看到null返回了一个object,说明null本质是一个对象,一个空对象。
对于以上类型typeof够用了,然而对于复杂的object却并不够
console.log(typeof []); //object
console.log(typeof {}); //object
这时候需要我们的instanceof了,它会返回一个布尔值,表示的是是否为某个构造函数的实例
console.log([] instanceof Array); //true
console.log({} instanceof Object); //true
var str = new String();
console.log(str instanceof String); //true
参考
【笔记】JS数据类型总结的更多相关文章
- vue—你必须知道的 js数据类型 前端学习 CSS 居中 事件委托和this 让js调试更简单—console AMD && CMD 模式识别课程笔记(一) web攻击 web安全之XSS JSONP && CORS css 定位 react小结
vue—你必须知道的 目录 更多总结 猛戳这里 属性与方法 语法 计算属性 特殊属性 vue 样式绑定 vue事件处理器 表单控件绑定 父子组件通信 过渡效果 vue经验总结 javascript ...
- 前端学习:学习笔记(JS部分)
前端学习:学习笔记(JS部分) 前端学习:JS学习总结(图解) JS的简介 JS基本语法 JS内置对象 JS的函数 JS的事件 JS的BOM JS的DOM JS的简介 新建步骤 <body ...
- 读书笔记 - js高级程序设计 - 第十五章 使用Canvas绘图
读书笔记 - js高级程序设计 - 第十三章 事件 canvas 具备绘图能力的2D上下文 及文本API 很多浏览器对WebGL的3D上下文支持还不够好 有时候即使浏览器支持,操作系统如果缺缺 ...
- 由js apply与call方法想到的js数据类型(原始类型和引用类型)
原文地址:由js apply与call方法想到的js数据类型(原始类型和引用类型) js的call方法与apply方法的区别在于第二个参数的不同,他们都有2个参数,第一个为对象(即需要用对象a继承b, ...
- 总结的JS数据类型判定(非常全面)
用typeof 来检测数据类型 Javascript自带两套类型:基本数据类型(undefined,string,null,boolean,function,object)和对象类型. 但是如果尝试用 ...
- JavaScript学习10 JS数据类型、强制类型转换和对象属性
JavaScript学习10 JS数据类型.强制类型转换和对象属性 JavaScript数据类型 JavaScript中有五种原始数据类型:Undefined.Null.Boolean.Number以 ...
- JS数据类型的理解(猜测)
Js 数据类型 对于这个主题,首先来看几个问题,如果你对这几个问题很清楚的话,那就请直接跳过吧,不用接着往下看了,如果不清楚,建议你还是看看. 1)如果判断函数?function 和object的联系 ...
- web开发与设计--js数据类型,js运营商
1. js数据类型划分:号码值类型,布尔,串 由typeof能够看到什么类型的数据被详述. 举例: <span style="font-family:Microsoft YaHei;f ...
- [妙味JS基础]第四课:JS数据类型、类型转换
知识点总结 JS数据类型:number数字(NaN).string字符串.boolean布尔值.函数类型.object对象(obj.[].{}.null).undefined未定义 typeof 用来 ...
- JavaScript大厦之地基:js数据类型
一.数据和类型 俗话说物以类聚,人以群分:这里将人和物都按类别进行了区分.我们数据也一样,使用计算机我们能处理数值,也可以处理文本还可以处理图形.音频.视频等各种各样的数据,不同的数据有 ...
随机推荐
- [BZOJ 2839]集合计数
Description 题库链接 有 \(2^n\) 个集合,每个集合只包含 \([1,n]\) ,且这些集合两两不同.问有多少种选择方法(至少选一个),使得这些集合交集大小为 \(k\) . \(0 ...
- [转]微信小程序之购物车功能
本文转自:https://www.cnblogs.com/linxin/p/6834206.html 前言 以往的购物车,基本都是通过大量的 DOM 操作来实现.微信小程序其实跟 vue.js 的用法 ...
- GitHub fork的使用
我的GitHub账号是lanshanxiao,fork的账号是king1ko1king,再此说明! fork的项目是:Class-for-Everyone-Java-Server- 作者源项目地址是: ...
- Python 2 和 Python 3 有哪些主要区别
概述# 原稿地址:使用 2to3 将代码移植到 Python 3 几乎所有的Python 2程序都需要一些修改才能正常地运行在Python 3的环境下.为了简化这个转换过程,Python 3自带了一个 ...
- Unix Programming :文件IO
文件描述符常量(unistd.h): STDIN_FILENO STDOUT_FILENO STDERR_FILENO 通常这些常量分别对应于数字0,1,2 文件操作需要头文件 fcntl.h ,一些 ...
- react组件里阻事件冒泡
e.nativeEvent.stopImmediatePropagation();
- Spring Boot—20Zookeeper
https://docs.spring.io/spring-boot/docs/2.0.1.RELEASE/reference/htmlsingle/ pom.xml <dependency&g ...
- OpenGL学习--05--纹理立方体--代码
1.tutorial05.cpp // Include standard headers #include <stdio.h> #include <stdlib.h> // I ...
- 在android工程中,res目录下又有anim、drawable、layout、menu、raw、values和xml文件夹,分别用来保存?
res目录主要是存放资源文件的!layout 布局 这个就是你经常看到的与用户交互的界面的 xml 文件,就是各个 view 的排列和嵌套,没什 么好说的啦 风格和主题. 风格主要是指 view 的显 ...
- sql 字符、数字类型自动转换及运算
本页面所有内容也可以在oracle 运行,只需要把int.float .decimal 改为 number类型即可 -- 字符串转数字 int 类型 drop table test;create ta ...