2021-03-25 类型、值和变量

概述与定义

JavaScript 类型可以分为两类: 原始类型和对象类型。

原始类型

原始类型包括: 数值(Number)、文本字符串(也称字符串-String)、布尔真值(也称布尔值-Boolean)、null、undefined、符号(Symbol);

数值 Number

主要表示整数和近似实数。
标准: IEEE 754标准(double类型的数值)定义的64位浮点格式表示数值。

整数字面量

10进制、16进制、
ES 6 之后的版本 2进制、8进制表示整数 分别使用前缀0b和0o(或0B和0O)

浮点字面量

浮点字面量可以包含小数点,他们对实数使用传统语法。实数值由整数部分、小数点和数值的小数部分组成。
也可以使用指数计数法表示。 语法为: [digits][.digits][(E|e)[(+|-)]digits]

例如:

3.14
2345.6789
.333333
6.02e23 // 6.02 乘于10的23次幂

对象类型

什么是对象?
对象是属性的集合,其中每个属性都有一个名字和一个值。有一个非常特殊的对象叫全局对象,关于更详细的去见对象介绍。

1. 普通对象Javascript对象是一个命名值的无序集合。关于更详细的去见对象章节
2. 特殊对象-数组,表示一个数字值的有序集合。关于更详细去见数组章节
3. Set对象, 一组值的集合
4. Map对象, 键与值的映射
5. RegExp类型, 表示文本模式,可以实现对字符串复杂匹配、搜索和替换操作。
6. Date类型,表示日期和时间,支持基本的日期计算。
7. Error及其子类型表示JavaScript代码运行期间可能发生的错误。 
8. 函数(Function)
9. 类(Class)

在内存管理方面,JavaScript解释器会执行自动垃圾收集。这意味着JavaScript程序员通常不用关心对象或其他值的析构与释放。当一个值无法触达时,或者说当程序无法以任何方式引用这个值时,解释器就知道这个值已经用不到了, 会自动释放他占用的内存(JavaScript程序员要注意,不能让某些值在不经意间存续过长时间后仍可触达,从而导致他们无法回收)。

插入时间: 2021年4月1日

字符串

使用字符串

let s = "Hello, world";
s.length //字符串长度

// 取得字符串的一部分
s.substring(start, end) // => 第start~end个字符 
s.slice(start, end) // => 同上
s.slice(-3) // => 最后三个字符
s.plit(",") // => ["Hello", "world"];

// 搜索字符串
s.indexOf("l");  // => 2:  第一个字母l的位置;
s.indexOf("l",3);  // => 3:  位置3后面第一个"l"的位置;
s.indexOf("zz");  // => -1;s并不包括子串"zz";
s.lastIndexOf("l");  // => 10; 最后一个字母l的位置;

//ES6 及之后版本中的布尔值搜索函数
s.startsWith('Hell')  // => true: 字符串是以这些字符开头的
s.endsWith("!") // => false: s不是以它结尾的
s.includes("or") // true: s包含子串 ”or“

// 创建字符串的修改版本
s.replace("llo", "ya") // => "Heya, world"
s.toLowerCase() // => "hello, world"
s.toUpperCase() // => "HELLO, WORLD"
s.normalize() // => Unicode NFC 归一化: ES6新增
s.normalize("NFD") // => NFD 归一化。还有"NFKC" 和 "NFKD"

//访问字符串中的个别(16位值)字符
s.charAt(0) // => "H": 第一个字符
s.charAt(s.length-1) // => "d": 最后一个字符 
s.charCodeAt(0) // => 72: 指定位置的16位数值
s.codePointAt(0) // => 72: ES6,适用于码点大于16的情况

// ES2017 新增字符串填充函数
"x".padStart(3) // => "   x", 左侧添加空格, 让字符串长度变成3
"x".padEndt(3) // => "x   ", 右侧添加空格, 让字符串长度变成3
"x".padStart(3, "*") // => "**x", 左侧添加空格, 让字符串长度变成3
"x".padEndt(3, "*") // => "x**", 右侧添加空格, 让字符串长度变成3

// 删除空格函数
"   test   ".trim() // => "test" 删除开头和末尾的空格;
"   test".trimStart() // => "test" 删除开头空格;
"test   ".trimEnd() // => "test" 删除末尾的空格;

// 未分类字符串方法
s.concat("!") // => "Hello, word!" 可以用+操作符代替
"<>".repeat(5) // => "<><><><><>": 拼接n次。

// 注意 : 
// replace 和 toUpperCase 这样的方法都是返回新字符串, 他们并不会修改调用他们的字符串。
// 字符串也可以被当成只读数组, 可以使用方括号而非charAt方法访问字符串中个别的字符(16位值)
s[0] // => "h"
s[s.length-1] // => "d"

模版字面量

表示: 字符串字面量可以用反引号来定界: let s = `hello, world`
组合:

let names = "Bill";
let greeting = `Hello ${name}` // => greeting = "Hello Bill";

布尔值

表示: 真或假、开或关、是或否。 这个类型只有两个值: true 和 false

if (a === 4) {
  b = b + 1;
} else {
  a = a + 1;
}
// 检查 a是否等于4,如果等于,则给b加1;否则,给a加1;
// 注意:
// JavaScript 的任何值都可以转换成布尔值。
undefined
null
0
-0
NaN
"" // 空字符串

null 和 undefined

null

表示: 某个值不存在。对null 使用typeof 操作符返回字符串"object",可以将null堪称一种特殊对象, 表示没有对象。并且可以用来表示数值、字符串、以及对象"没有值"。

-------2021.04.07 -------

符号

符号(Symbol)是ES6新增的一种原始类型,用作非字符串的属性名。要理解符号,需要了解JavaScript的基础类型Object是一个属性的无序集合,其中每个属性都有一个名字和一个值。
属性名通常是(ES6之前一直必须是)字符串。但在ES6和之后的版本中,符号也可以作为属性名:

  let strname = 'string name' // 可以用作属性名的字符串
  let symname = Symbol('propname'); // 可以用作属性名的符号
  typeof strname; // => 'string': strname 是字符串
  typeof symname; // => 'symbol': symname 是符号
  let o = {} ; // 创建一个新对象
  o[strname] = 1; // 使用字符串定义一个属性
  o[symname] = 2; //  使用符号名定义一个属性
  o[strname] ; //  => 1: 访问字符串名字的属性
  o[symname]; // => 2: 访问符号名字的属性

实践中,符号通常用作一种语言拓展机制。为此就需要定义一种标准的机制让类可以实现,从而把自身变得可迭代。但选择任何特定的字符串作为这个迭代器方法的名字都有可能破坏已有的代码, 为此,符号应运而生。Symbol.iterrtor是一个符号,可用作一个方法名,让对象可迭代。

Symbol()函数可选地接受一个字符串参数,返回唯一的符号值。如果提供字符串参数,那么调用返回符号值的toString()方法得到的结果中会包含该字符串。以相同的字符串调用两次Symbol()会产生两个完全不同的符号值;

let s = Symbol('sym_x');
s.toString(); // => 'Symbol(sym_x)'

可以与其他代码共享的符号值, JavaScript 定义了一个全局符号注册表。Symbol.for()函数接受一个字符串参数,返回一个与该字符串关联的符号值。

字符串也可以通过将返回的符号传给Symbol.keyFor()得到。

let s = Symbol.for('shared');
let t = Symbol.for('shared');

s === t // => true
s.toString // => 'Symbol(shared)'
Symbol.keyFor(t) // => 'shared'

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容