JavaScript学习笔记-数据类型(Object)
定义
ES中对象是一组数据和功能的集合
对象被认为是౼个特定引用类型的实例
创建和使用
对象通过new操作符跟对象类型的名称来创建
如果没有参数,可以省略括号
属性和方法
属性和方法
作用
constructor
用于创建当前对象的函数
hasOwnProperty(propertyName)
用于判断当前对象上是否存在给定属性
isPrototypeOf(Object)
用于判断当前对象是否是另一个对象的原型
propertyIsEnumerable(propertyName)
用于判断给定的属性是否可以使用for-in语句枚举
toLocaleString()
返回对象的字符串表示,该字符串反映对象所在的本地化执行环境
toString()
返回对象的字符串表示
valueOf()
返回对象对应的字符串、数值或布尔值表示,通常与toString()返回值相同
JavaScript学习笔记-数据类型(Symbol)
基本用法
Symbol为原始类型,可以使用typeof操作符进行检测
12let mes = Symbol();console.log(typeof mes)//Symbol
Symbol(name)
name作为对符号的描述
与符号定义或标识完全无关
123let sys1 = Symbol('foo');let sys2 = Symbol('foo');console.log(sys1 == sys2);//false
符号没有字面量语法
创建Symbol()实例并将其用作对象的新属性,就可以保证它不会覆盖已有的对象属性
Symbol()不能与new关键字一起作为构造函数使用
为了避免创建符号包装对象
可以使用Object()函数创建符号包装对象123456let str = new String();console.log(typeof str);//objectlet sys = new Symbol();// TypeError: Symbol is not a constructorlet mySymbol = S ...
JavaScript学习笔记-数据类型(String)
概述定义零或多个16位Unicode字符序列。
创建方式
单引号、双引号、反引号标示。
以某种引号作为字符串开头,必须仍然以该种引号作为字符串结尾。
123let message = 'Hello World'let message1 = "Hello World"let message2 = `Hello World`
字符字面量
用于标识非打印字符或有其他用途的字符。
转义序列表示一个字符,在计算字符串长度时算一个字符。
如下表:
字面量
含义
\n
换行
\t
制表
\b
退格
\r
回车
\f
换页
\\
反斜杠
\'
单引号
\"
双引号
字符串特点
不可变:一旦创建就不能发生变化
如果要修改每个变量中的字符串的值,必须先销毁原始的字符串然后重新赋值
转换字符串
方法:toString()
null和undefined没有toString()方法,直接返回两个值的字面量文本
数值调用toString方法可以接受一个参数,表示进制。123let num = 10cons ...
JavaScript学习笔记-数据类型(Number)
Number类型概述
Number 类型使用 IEEE 754 格式表示整数和浮点值
不同数值类型有不同的数值字面量格式
八进制字面量:
1234567/*1、第一个数字必须是0,然后对应八进制数字2、字面量中数字超出范围就会忽略第一个0,然后当作十进制处理*/let num1 = 070;//56let num2 = 079;//十进制79let num3 = 08;//十进制8
十六进制字面量:
123456/*1、前缀为0x且区分大小写2、字母大小写均可*/let num1 = 0xa;//10let num2 = 0x1F;//31
浮点数基础知识
定义:数值中必须包含小数点,并且小数点后面必须至少有一个数字123let floatNum1 = 5.20;let floatNum2 = 13.14;let floatNum3 = .20;//不推荐使用
存储浮点值使用的内存空间是整数值的两倍
科学计数法
用于表示一个应该乘以10的给定次幂的数值
表示方式:123let num1 = 3.125e7let num2 = 31250000console.log(num1 = ...
JavaScript学习笔记-数据类型(Undefined、Null、Boolean)
Undefined类型
只含有underfined一个值
变量定义但未初始化时自动赋予underfined
变量定义但未初始化和未定义是不同的
123let message;console.log(message);//underfinedconsole.log(mix)//Error
underfined常用于比较来确定变量是否初始化/赋值了
12let message = underfined;console.log(message == underfined);//true
变量无论是声明还是未声明,typeof 返回的都是字符串”undefined”
undefined 是一个假值
1234567let message;if(message){ console.log("变量初始化了!")}else{ console.log("变量未初始化!")}//变量未初始化
Null类型
只有一个值:null,表示一个空对象指针
undefined是由null派生而来的,表面上相等
nul ...
JavaScript学习笔记(十)垃圾回收
JavaScript 是使用垃圾回收的语言,也就是说执行环境负责在代码执行时管理内存;
通过自动内存管理实现内存分配和闲置资源回收;
基本思路:确定哪个变量不会再使用,然后释放它占用的内存
这个过程是周期性的,即垃圾回收程序每隔一定时间,就会自动运行
两种主要的标记策略:标记清理和引用计数
标记清理定义当变量进入上下文,比如在函数内部声明一个变量时,这个变量会被加上存在于上下文中的标记;当变量离开上下文时,也会被加上离开上下文的标记。
标记方式
当变量进入上下文时,反转某一位
维护“在上下文中”和“不在上下文中”两个变量列表,可以把变量从一个列表转移到另一个列表
引用计数设计思路
对每个值都记录它被引用的次数;
声明变量并给它赋一个引用值时,这个值的引用数为 1;
如果同一个值又被赋给另一个变量,那么引用数加 1;
如果保存对该值引用的变量被其他值给覆盖了,那么引用数减 1;
当一个值的引用数为 0 时,就说明没办法再访问到这个值了,因此可以安全地收回其内存了。
性能
垃圾回收程序会周期性运行,如果内存中分配了很多变量,则可能造成性能损失,因此垃圾回收的时间调度很重要;
无 ...
JavaScript学习笔记(九)执行上下文和作用域
每个上下文都有一个关联的变量对象(variable object),而这个上下文中定义的所有变量和函数都存在于这个对象上
全局上下文是最外层的上下文;
在浏览器中,全局上下文就是我们常说的 window 对象;
上下文在其所有代码都执行完毕后会被销毁,包括定义在它上面的所有变量和函数;
当代码执行流进入函数时,函数的上下文被推到一个上下文栈上。在函数执行完之后,上下文ಖ会弹出该函数上下文,将控制权返还给之前的执行上下文;
上下文中的代码在执行的时候,会创建变量对象的一个作用域链(scope chain),其决定了各级上下文中的代码在访问变量和函数时的顺序;
活动对象最初只有一个定义变量:arguments;
全局上下文的变量对象始终是作用域链的最后一个变量对象;
作用域链增强
try/catch语句中的catch块
catch 语句而言,则会创建一个新的变量对象
with语句
语句会向作用域链前端添加指定的对象
变量声明
var作用域声明
使用var声明变量时,变量会被自动添加到最接近的上下文;
如果变量未经声明就被初始化了,那么它就会自动被添加到全局上下文
var 声 ...
JavaScript学习笔记(八)原始值与引用值
什么是原始值和引用值
原始值(primitive value)就是最简单的数据
原始值有六种:Undefined、Null、Boolean、Number、String 和 Symbol;
保存原始值的变量是按值(by value)访问的,直接对存储在变量中的实际值进行操作
引用值(reference value)则是由多个值构成的对象
引用值是保存在内存中的对象
JavaScript 不允许直接访问内存位置,因此也就不能直接操作对象所在的内存空间
保存引用值的变量是按引用(by reference)访问的
在操作对象时,实际上操作的是对该对象的引用(reference)而非实际的对象本身
动态属性
动态属性实际上就是在对象被创建后给这个对象添加新的属性,该属性可以被访问使用,直至对象被销毁或者属性被显示的删除。
原始值是不能有属性的,只有引用值可以动态添加后面可以使用的属性
原始类型的初始化可以只使用原始字面量形式。如果使用的是 new 关键字,则 JavaScript 会创建一个 Object 类型的实例,但其行为类似原始值。12345678let str1 = " ...
JavaScript学习笔记(七)语句
if语句
语法格式:
if(condition) statement1 else statement21234567if(condition1){ statement1} else if(condition2){ statement2} else{ statement3}
do-while语句
后循环语句:循环体中的代码执行后才会对推出条件进行求值
语法格式:
123do{ statement}while (expression);
while语句
语法格式:
123while(expression){ statement}
for语句
语法格式:
123for(initialization;expression;post-loop-expression){ statement}
无穷循环:
123for(::){ statement}
for-in语句
for-in 语句是一种严格 ...
JavaScript学习笔记(六)操作符
操作符包括:数学操作符、位操作符、关系操作符和相等操作符。
操作符可用于各种值,包括字符串、数值、布尔值、甚至还有对象。
在应用给对象时,操作符通常会调用 valueOf()和/或 toString()方法来取得可以计算的值。
一元操作符定义
只操作一个值的操作符叫一元操作符
递增/递减操作符分类
前缀版
操作符位于待操作变量的前面
副作用:无论使用前缀递增还是前缀递减操作符,变量的值都会在语句被求值之前改变123456let num = 10;let other = --num + 5;let another = num + 5;console.log(num);//9console.log(other);//14console.log(another);//14
后缀版
操作符位于待操作变量的后面
后缀版递增和递减在语句被求值后才发生1234let num = 10;let another = num-- + 5;console.log(num);//10console.log(another);//14
前缀递增和递减在语句中的优先级是相等的,因此会从左到右依次求值 ...