资讯专栏INFORMATION COLUMN

js 数据类型笔记

eechen / 2302人阅读

摘要:狭义的对象数组函数运算符这个运算符测试一个值到底是什么数据类型重点就是二和布尔值转数字化转为数字是转为数字是的使用场景表示空值。

这篇文章主要是对阮一峰老师javascript教程中数据类型和运算的笔记,方便记忆。
有需要的朋友建议直接观看阮一峰老师javascript教程,写得更详细

一:数据类型概述 1、简介6种数据

1.1数值(number):整数和小数
1.2字符串(string):文本
1.3布尔值(boolean):表示真伪的两个特殊值,即true(真)和false(假)
1.4undefined:表示“未定义”或不存在
1.5null:表示空值,
1.6对象(object):各种值组成的集合,分成三个子类型。

狭义的对象(object)

数组(array)

函数(function)

2、typeof 运算符

这个运算符测试一个值到底是什么数据类型
重点就是

</>复制代码

  1. typeof null // "object"
  2. typeof undefined // "undefined"
二、null, undefined 和布尔值 1、null, undefined转数字化

null 转为数字是 0
undefined 转为数字是 NAN

2、null, undefined的使用场景

null表示空值。
undefined表示“未定义”,场景有4个

2.1变量声明了,但没有赋值

</>复制代码

  1. var i;
  2. i // undefined

2.2调用函数时,应该提供的参数没有提供,该参数等于 undefined

</>复制代码

  1. function f(x) {
  2. return x;
  3. }
  4. f() // undefined

2.3对象没有赋值的属性

</>复制代码

  1. var o = new Object();
  2. o.p // undefined

2.4函数没有返回值时,默认返回 undefined

</>复制代码

  1. function f() {}
  2. f() // undefined
3、布尔值

3.1哪些运算符会产出布尔值

前置逻辑运算符: ! (Not)

相等运算符:===,!==,==,!=

比较运算符:>,>=,<,<=

3.2其他数据类型转换成布尔值
转换规则是除了下面六个值被转为false,其他值都视为true。

undefined

null

false

0

NaN

""或""(空字符串)

3.3转换成布尔值的应用环境
大部分是用于判断程序流程,如下面把if()里面判断成布尔值

</>复制代码

  1. if ("") {
  2. console.log("true");
  3. }
三、数值(该部分内容较多,我只是简要摘取一部分)

数值组成方式
JavaScript 内部,所有数字都是以64位浮点数形式储存。
第1位:符号位,0表示正数,1表示负数
第2位到第12位(共11位):指数部分
第13位到第64位(共52位):小数部分(即有效数字)

四、字符串

1、定义:
字符串就是零个或多个排在一起,放在单引号或双引号之中的字符

2、字符串使用的异常场景

2.1 单引号字符串的内部,可以使用双引号,不能直接使用单引号。双引号字符串的内部,可以使用单引号,不能直接使用双引号

</>复制代码

  1. "key = "value""

2.2 在单引号字符串的内部,使用单引号,就必须在内部的单引号前面加上反斜杠,用来转义

</>复制代码

  1. "Did she say "Hello"?"
  2. // "Did she say "Hello"?"

2.3字符串默认只能写在一行内,分成多行将会报错

</>复制代码

  1. "a
  2. b
  3. c"
  4. // SyntaxError: Unexpected token ILLEGAL

2.4如果长字符串必须分成多行,可以在每一行的尾部使用反斜杠

注意,反斜杠的后面必须是换行符,而不能有其他字符(比如空格),否则会报错。

</>复制代码

  1. var longString = "Long
  2. long
  3. long
  4. string";
  5. longString
  6. // "Long long long string"

2.5可以用+连接多个单行字符串,将长字符串拆成多行书写

</>复制代码

  1. var longString = "Long "
  2. + "long "
  3. + "long "
  4. + "string";

2.6 es6新增写法
使用`包裹字符串,就可以实现换行。**这个符号是键盘esc下面那个键**

3、字符串的使用

3.1获取字符串的长度

</>复制代码

  1. var str = "hello";
  2. console.log( str.length );

3.2通过下标获取到字符串某个字符的值

</>复制代码

  1. console.log( str[0] ); //h
  2. console.log( str[str.length - 1] ); // 0

3.3通过charaAt获取到字符串某个字符的值

</>复制代码

  1. var str = "hello";
  2. console.log( str.charAt(0) ); // h
  3. console.log( str.charCodeAt(0) ); //输出对应字符的ASCII码

3.4字符串截取
注意截取后,原来的字符串不变

</>复制代码

  1. var str = "hello world";
  2. var sub1 = str.substr(1, 3); // 第一个是开始位置, 第二个是长度
  3. var sub2 = str.substring(1, 3); // 第一个是开始位置,第二个是结束位置,str[结束位置]不会被截取进去

3.5用search查找字符串内是否有对应的内容
原来的字符串不变

</>复制代码

  1. var str = "hello my world";
  2. var s1 = str.search("my"); //6(开始位置) 找不到为-1

3.6 用replace替换字符串的值
原来的字符串不变

</>复制代码

  1. var s2 = str.replace("my", "your") //前面是被替换内容,后面是替换内容

3.7改变字符串大小写
字符串操作不会修改原来的字符串

</>复制代码

  1. var str = "Hello";
  2. str.toUpperCase(); //HELLO
  3. str.toLowerCase(); //hello

3.8字符串拼接

两个不同字符串相+

</>复制代码

  1. var str1="hello"
  2. var str2="world"
  3. str1+str2 //"helloworld"

字符串名和字符串相加

</>复制代码

  1. var color ="red"
  2. var str="衣服的颜色是"+color //衣服的颜色是red

字符串模板

</>复制代码

  1. var name = "饥人谷"
  2. var website = "jirengu.com"
  3. var str = `你好, 这里是${name}${website},开启你的前端之路`
  4. //"你好, 这里是饥人谷,jirengu.com,开启你的前端之路"
五、对象 1、定义:

对象就是一组“键值对”(key-value)的集合,是一种无序的复合数据集合。

2、对象的组成

</>复制代码

  1. var obj = {
  2. foo: "Hello",
  3. bar: "World"
  4. };

该对象内部包含两个键值对

foo是“键名”(成员的名称),字符串Hello是“键值”(成员的值)

两个键值对之间用逗号分隔

3、键名的定义规则

对象的每一个键名又称为“属性”(property)

3.1对象的所有键名都是字符串,可以不用打引号

3.2键名如果是数值,会转成字符串

</>复制代码

  1. var obj = {
  2. 1: "a",
  3. 3.2: "b",
  4. 1e2: true,
  5. 1e-2: true,
  6. .234: true,
  7. 0xFF: true
  8. };

3.3键名的命名满足标识名的条件,不然就要打上引号

</>复制代码

  1. var obj = {
  2. 1p: "Hello World"
  3. };
  4. // 不报错
  5. var obj = {
  6. "1p": "Hello World",
  7. "h w": "Hello World",
  8. "p+q": "Hello World"
  9. };
4、键值的使用场景

对象的每一个键名又称为“属性”(property),它的“键值”可以是任何数据类型。

4.1属性的值为函数,通常把这个属性称为“方法”,它可以像函数那样调用。

</>复制代码

  1. var obj = {
  2. p: function (x) {
  3. return 2 * x;
  4. }
  5. };
  6. obj.p(1) // 2

4.2属性的值还是一个对象,就形成了链式引用。

</>复制代码

  1. var o1 = {};
  2. var o2 = { bar: "hello" };
  3. o1.foo = o2;
  4. o1.foo.bar // "hello"
5、对象获取键值的方式(只有两种)

5.1通过对象名.属性名来获取属性的值

</>复制代码

  1. var o1 = {};
  2. var o2 = { bar: "hello" };
  3. o1.foo = o2;
  4. **o1.foo.bar** // "hello"

5.2通过对象名["属性名"]来获取属性的值,注意中括号里面是字符串,所以一定要加引号

</>复制代码

  1. o1["foo"]
  2. ol[foo]就是错误的,因为浏览器解析时会认为foo是一个变量,找不到这个变量就会报错
6、对象的引用

如果把一个原始类型(number 字符串 等)的值赋值给变量。那变量这时都是值的拷贝。
如果把对象赋值给变量,我们只是将对象的存储地址指向了变量。

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

</>复制代码

  1. var o1 = {};
  2. var o2 = o1;
  3. o1.a = 1;
  4. o2.a // 1
  5. o2.b = 2;
  6. o1.b // 2
7、表达式还是语句?

JavaScript规定,如果行首是大括号,一律解释为语句(即代码块)。
如果要解释为表达式(即对象),必须在大括号前加上圆括号。

</>复制代码

  1. eval("{foo: 123}") // 123 这是一个语句,表示一个代码区块,里面有一个标签foo,指向表达式123。
  2. eval("({foo: 123})") // {foo: 123} 这是一个表达式,表示一个包含foo属性的对象

</>复制代码

  1. {foo:123}.foo 是错误的
  2. ({foo:123}).foo //输出的是123
8、对象的使用方法

8.1 检查变量是否声明
原理:在浏览器环境,所有全局变量都是window对象的属性。
window.a的含义就是读取window对象的a属性,如果该属性不存在,就返回undefined,并不会报错。

</>复制代码

  1. if ("a" in window) {
  2. // 变量 a 声明过
  3. } else {
  4. // 变量 a 未声明
  5. }

8.2属性的赋值
和读取值一样,有两种方法

</>复制代码

  1. o.p = "abc";
  2. o["p"] = "abc";

8.3用Object.keys查看所有属性

</>复制代码

  1. var o = {
  2. key1: 1,
  3. key2: 2
  4. };
  5. Object.keys(o);
  6. // ["key1", "key2"]

8.4 delete删除对象的属性

</>复制代码

  1. var o = {p: 1};
  2. Object.keys(o) // ["p"]
  3. delete o.p // true
  4. o.p // undefined

注意:delete命令不能删除var命令声明的变量,只能用来删除属性。因为var声明的全局变量都是顶层对象的属性,而且默认不得删除。

</>复制代码

  1. var p = 1;
  2. delete p // false
  3. delete window.p // false

8.5用for...in循环用来遍历对象的全部属性
var obj = {a: 1, b: 2, c: 3};

for (var i in obj) {
console.log(o[i]);
}
// 1
// 2
// 3
i就是定义了一个变量,里面放的就是对象的属性

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/99334.html

相关文章

  • JS笔记二:JS历史、数据类型、for in遍历对象、typeof的BUG

    摘要:学习笔记二个人学习笔记参考阮一峰的教学学习笔记二是对学习笔记一的补充历史是标准新增特性汇总方应航知乎专栏个小变化新增特性汇总方应航知乎专栏以后一年一次只增加了两个特性只增加了个特性功能最多数据类型补充字符串多行字符串新特性多行字符串 JavaScript学习笔记二 个人学习笔记 参考阮一峰的JavaScript教学 学习笔记二是对学习笔记一的补充 JavaScript历史 sho...

    mrcode 评论0 收藏0
  • js笔记内容

    摘要:定义运算符用来判断一个构造函数的属性所指向的对象是否存在另外一个要检测对象的原型链上,用于引用类型。但其实,实例的来自于构造函数的。 一、关于css 样式优先级: 行内样式>id选择器样式>类选择器样式>标签选择器样式>通配符选择器的样式>继承样式>默认样式 二、关于js 关于问题:**JavaScript中的所有事物都是对象??** 从typeof和instanceo...

    n7then 评论0 收藏0
  • js随手笔记-------理解JavaScript中的堆和栈

    摘要:最近由于做的项目需求牵扯到了大量的数据处理,于是就想了解一下中的数据类型,于是就百度了一下找到了些干货,在这里精简下做个笔记,以方便日后需要的时候查看这里先说两个概念堆栈堆是堆内存的简称。 最近由于做的项目需求牵扯到了大量的数据处理,于是就想了解一下javascript中的数据类型,于是就百度了一下找到了些干货,在这里精简下做个笔记,以方便日后需要的时候查看:这里先说两个概念:1、堆(...

    reclay 评论0 收藏0
  • 前端笔记——JS基础(变量类型和计算)

    摘要:基础变量类型和计算中使用的类型基本类型引用类型对象数组函数引用类型只能区分基本类型,无法区分对象数组这三种引用类型何时使用何时使用字符串拼接类型转换号语句逻辑运算符当时判断一个变量是被当做还是相当于,简写形式这是源码中推荐的写法其他情况全部 JavaScript基础——变量类型和计算 q:JS中使用 typeof 的类型? 基本类型 `undefined` `null` `bool...

    wangtdgoodluck 评论0 收藏0
  • JS高级程序设计(1-3章)-笔记

    摘要:写在前面本文记录的是我不熟悉或者我认为值得注意的地方,并不是书上知识点的概括。再就是画图这种。与浏览器没有依赖关系。 写在前面 本文记录的是我不熟悉或者我认为值得注意的地方,并不是书上知识点的概括。 第1章 JavaScript简介 JS诞生时间:1995年(好年轻...) JS诞生背景:表单数据合法性由服务端验证的用户体验不好,希望能在客户端进行验证 JS现在用处:如果没有...

    Cristic 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<