JS 里的数据类型

1. 七种数据类型

  • number 数值 :整数和小数
  • string字符串 : 文本
  • boolean布尔值 :true false
  • undefined :未定义或不存在
  • null :空值
  • object对象 : 值的集合
  • symbol
    前五种是基本类型
    对象包括: object 、 array数组 、function函数

2. typeof 运算符 typeof 可以用来检查一个没有声明的变量,而不报错。

数值 : number
字符串 :string
布尔值 :boolean
函数 :function
undefined :undefined
null : object

3.null 和 undefined

区别:null是一个空值 转为数值时为0
undefined 是一个表示 “此处未定义” 的原始值,转为数值时为 NaN
在 if 语句中两个都是 false
相等运算符(==)甚至直接报告两者相等

用法和含义

调用函数时,某个参数未设置任何值,传入null,表示参数为空

undefined 未定义

  • 变量声明,但未赋值
  • 调用函数时,应该提供的参数没有提供,该参数等于undefined.
  • 对象没有赋值的属性
  • 函数没有返回值,默认返回undefined

4. 布尔值 true false

  • 两元运算符 &&(and) //(or)
  • 前置逻辑运算符 ! (not)
  • 相等运算符 === == !== !=
  • 比较运算符 > < >= <=
    一般用于程序流程的控制

空数组([])和空对象({})对应的布尔值,都是true

五个falsy值 其他都为true

undefined null 0 NaN ' '(空字符串) false

5. Number

所有数字都是以64喂浮点数储存

数值精度

第一位 : 符号位 0 正 1 负
第2到12位: 指数部分
第13到64位:小数部分 (有效数字)

数值范围:21024~2-1023

a> 2^1024 正向溢出 返回Infinity
a< 2^-1075 负向溢出 返回0

数值的表示法

科学计数 :
123e3 //123000 123e-3 //0.123
自动转为 小数点后的0 多余5
(0.0000003 //3e-7)
小数点前的数字多余21位

数值的进制

2 8 10 16 进制
十进制 : 没有前导 0的数字
八进制: 0o 或0O的数值 或有前导0 只用到0-7的数值 0o377 // 255
十六进制 : 0x或0X的数值 0xff //255
二进制: 有前缀0b 或0B的数值 0b11 // 3

特殊字符 0

正零 和 负零

+ 0 === -0 //true
唯一区别: 坐分母时返回值不一样
1/+0 // +Infinity 1/-0 //-Infinity 无穷

NaN

表示 非数字 数据类型是Number
0/0 // NaN
运算规则

  • NaN不等于任何值,包括自身
  • NaN 布尔运算是false
  • NaN与任何值运算都是 NaN
  • 数组的indexof方法内部使用的是严格相等运算符,该方法对NaN不成立

6. Boolean 字符串

概述:就是多个或单个拍在一起的字符放在单引号或双引号中。

  • 单引号中使用多引号 双引号中使用单引号
    " ' ' " ' " " '
  • 字符串默认写在一行,分成多行会报错
  • 多行字符串写法
var long ='long'
   + 'long'
   + 'string';
var long = 'long\
long\
string`;

转义符

\0 :null(\u0000) \b :后退键(\u0008)
\f :换页符(\u000C) \n :换行符(\u000A)
\r :回车键(\u000D) \t :制表符(\u0009)
\ v :垂直制表符(\u000B) \ ' :单引号(\u0027)
\ " :双引号(\u0022) \ \ :反斜杠(\u005C)

length 属性

返回字符串的长度,属性无法改变

Base 64 转码

btoa() : 任意值转为 Base64 编码
atob(): Base64编码转为原来的值

7. 对象 Object

概述 ; 对象就是一组 "键值对" 的集合,无序的复合数据类型

对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型。如果一个属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用。

  • 键名是数值,自动转为字符串
  • 键名不符合标识符的条件,也不是数字,必须加引号。
  • 键名 都是 属性,键值可以是任何数据类型

对象的引用

如果不同的变量名指向同一个对象,那么它们都是这个对象的引用,也就是说指向同一个内存地址。修改其中一个变量,会影响到其他所有变量。

如果取消某一个变量对于原对象的引用,不会影响到另一个变量

var o1 = {};
var o2 = o1;
o1 = 1;
o2   // {}

表达式还是语句

  • 行首是大括号,一律解释为代码块。
  • 如果解释为表达式,在大括号外加上圆括号。
eval('{foo: 123}') // 123
eval('({foo: 123})') // {foo: 123}

如果没有圆括号,eval将其理解为一个代码块;加上圆括号以后,就理解成一个对象。

属性的操作

一种是使用点运算符,还有一种是使用方括号运算符

var obj = {
  p: 'Hello World'
};
obj.p // "Hello World"
obj['p'] // "Hello World"
  • 如果使用方括号运算符,键名必须放在引号里面,否则会被当作变量处理。
  • 数字键可以不加引号,因为会自动转成字符串
  • 数值键名不能使用点运算符(因为会被当成小数点),只能使用方括号运算符

属性的赋值

点运算符,还有一种是使用方括号运算符

var obj = {};
obj.foo = 'Hello';
obj['bar'] = 'World';

Object.keys 查看所有属性

delete 命令 delete obj.width

delete命令用于删除对象的属性,删除成功后返回true

  • 删除一个不存在的属性,delete不报错,而且返回true
  • 只有一种情况delete命令会返回false,那就是该属性存在,且不得删除
  • delete命令只能删除对象本身的属性,无法删除继承的属性
    delete返回true,该属性依然可能读取到值 >>(继承的属性)

in 运算符

in运算符用于检查对象是否包含某个属性(注意,检查的是键名,不是键值),如果包含就返回true,否则返回false。
它不能识别哪些属性是对象自身的,哪些属性是继承的。

var obj = { p: 1 };
'p' in obj // true
'toString' in obj  // true

for…in 循环

for...in循环用来遍历一个对象的全部属性。

它遍历的是对象所有可遍历(enumerable)的属性,会跳过不可遍历的属性。
它不仅遍历对象自身的属性,还遍历继承的属性。

with 语句 不推荐使用

with语句的格式如下:
with (对象) {
语句;
}

var obj = {
  p1: 1,
  p2: 2,
};
with (obj) {
  p1 = 4;
  p2 = 5;
}
// 等同于
obj.p1 = 4;
obj.p2 = 5;

如果with区块内部有变量的赋值操作,必须是当前对象已经存在的属性,否则会创造一个当前作用域的全局变量。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 第2章 基本语法 2.1 概述 基本句法和变量 语句 JavaScript程序的执行单位为行(line),也就是一...
    悟名先生阅读 4,114评论 0 13
  • 运算符是处理数据的基本方法,用来从现有的值得到新的值。JavaScript 提供了多种运算符,本章逐一介绍这些运算...
    许先生__阅读 596评论 0 3
  • 什么是 JavaScript 语言? JavaScript 是一种轻量级的脚本语言。所谓“脚本语言”(script...
    oWSQo阅读 1,785评论 0 1
  • a20 js里的数据 非标准的语法通过 Babel 来转义使用将不存在的语法翻译成存在的语法 js有 7 种数据...
    半斋阅读 212评论 0 0
  • Linux的基本原则 由目的单一的小程序组成:组合小程序完成复杂任务。 一切皆文件。 尽量避免捕获用户接口。 配置...
    写给我的公主的简书阅读 224评论 0 0