JS高程读书笔记–第三章基本概念

JS高程读书笔记–第三章基本概念

JS高程读书笔记–第三章

语法

  1. ECMAScript中的一切(变量、函数名和操作符)都区分大小写。

  2. 不能把关键字、保留字、true、false和null用做标识符。

  3. 严格模式是为JavaScript定义了一种不同的解析与执行模型。在严格模式下,ECMAScript3中的一些不确定的行为将得到处理,而且对某些不安全的操作也会抛出错误。(”use strict”;)。

  4. ECMAScript中的语句以一个分号结尾;如果省略分号,则由解析器确定语句的结尾。

  5. 关键字可以用于表示控制语句的开始或结束,或者用于执行特定的操作等。

  6. 保留字某种意义上是为了将来的关键字而保留的单词。

  7. ECMAScript的变量是松散类型的,可以用来保存任何类型的数据,每个变量仅仅是一个用于保存值得占位符而已。

数据类型

ECMAScript中有5种简单数据类型(基本数据类型):Undefined、Null、Boolean、Number和String,还有一种复杂数据类型:Object。

typeof操作符

typeof是一个操作符而不是函数。对一个值使用typeof操作符可能返回下列某个字符串:

  • “undefined”–如果这个值未定义;

  • “boolean”–如果这个值是布尔值;

  • “string”–如果这个值是字符串;

  • “number”–如果这个值是数值;

  • “object”–如果这个值是对象或null;

  • “function”–如果这个值是函数;

  • 调用typeof null会返回”object”,因为特殊值null被认为是一个空的对象的引用

  • 可以通过typeof操作符来区分函数和其他对象

Undefined类型

Undefined类型只有一个值,即特殊的undefined。在使用var声明变量但未对其加以初始化时,这个变量就是undefined。

注:typeof操作符返回”undefined”值时,可以检测变量是否被声明,而不是是否初始化。因为对未声明的变量执行typeof操作符也返回”undefined”

Null类型

Null类型是第二个只有一个值的数据类型,这个特殊的值是null。从逻辑角度来看,null值表示一个空对象指针。

  • 如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而不是其他值

  • null == undefined // 返回true

Boolean类型

Boolean类型只有两个字面值:true和false(小写)。

JS中所有类型的值都有与这两个Boolean值等价的值,可以调用转换函数Boolean ( )。

数据类型 转换为true的值 转换为false的值
String 任何非空字符串 “”(空字符串)
Number 任何非零数字值(包括无穷大) 0和NaN
Object 任何对象 null
Undefined (不适用) undefined

Number类型

Number类型使用IEEE754格式来表示整数和浮点数值。

1.浮点数值

  • 所谓浮点数值,就是该数值中必须包含一个小数点,并且小数点后必须至少有一位数字

  • 保存浮点数值需要的内存空间是保存整数值的两倍,因此ECMAScript会不时地将浮点数值转换为整数值。

  • 对于极大极小的数值,可以用e表示法(科学计数法)表示的浮点数值表示。用e表示法表示的数值等于e前面的数值乘以10的指数次幂。

  • 浮点数值的最高精度是17位小数。

2.数值范围

  • 如果某次计算的结果得到了一个超出JS数值范围的值,那么这个数值将被自动转换成特殊的Infinity值

  • 想要确定一个数值是否是无穷的,可以使用isFinite() 函数

3.NaN

NaN,即非数值是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误)。

  1. 任何涉及NaN的操作都会返回NaN

  2. NaN与任何值都不相等,包括NaN本身

  3. isNaN()函数可以确定参数是否“不是数值”

4.数值转换

有三个函数可以把非数值转换为数值:Number()parseInt()parseFloat()。转型函数Number()可以用于任何数据类型,而另外两个函数则专门用于把字符串转换成数值。

Number()转换规则如下
  1. 如果是Boolean值,true和false将分别被转换为1和0。

  2. 如果是数字值,只是简单的传入和传出。

  3. 如果是null值,返回0。

  4. 如果是undefined,返回NaN。

  5. 如果是字符串,遵循以下规则:

  • 如果字符串中只包含数字,则将其转换为十进制数值;

  • 如果字符串中包含有效的浮点格式,则将其转换为对应的浮点数值;

  • 如果字符串中包含有效的十六进制格式,例如”0xf”,则将其转换为相同大小的十进制整数值;

  • 如果字符串是空的(不包含任何字符),则将其转换为0;

  • 如果字符串中包含除上述格式之外的字符,则将其转换为NaN;

  1. 如果是对象,则调用对象的valueOf()的方法,然后依照前面的规则转换返回的值。

parseInt()函数

Number()函数在转换字符串的时候比较复杂且不够合理,因此处理整数的时候更常用parseInt()
parseInt()函数在转换字符串时,更多的是看其是否符合数值模式。它会忽略字符串前面的空格,直至找到第一个非空格字符。如果第一个字符不是数字或者符号,parseInt()就会返回NaN。如果第一个字符是数字字符,parseInt()会继续解析,知道解析完所有或者遇到了非数字字符。

parseInt()转换空字符串会返回NaN,而Number()对空字符串返回0。

这个函数的第二个参数是转换时使用的基数。(建议无论在任何情况下都指定基数)

parseFloat()函数

parseInt()函数类似。区别为:

  • 字符串中第一个小数点是有效的,后面的小数点都是无效的

  • parseFloat()只解析十进制值,因此它没有用第二个参数指定基数的方法。它始终会忽略前面的0。

String类型

String类型用于表示由零或多个16位Unicode字符组成的字符序列,即字符串。用双引号表示的字符串和用单引号表示的字符串完全相同。

字符字面量

  • 字符字面量可以出现在字符串中的任意位置,而且也将被作为一个字符来解析。

  • 任何字符串的长度都可以通过访问其length属性取得。

字符串的特点

ECMAScript中的字符串是不可变的,也就是说,字符串一旦创建,它们的值就不能改变。要改变某个变量保存的字符串,首先要销毁原来的字符串。

转换为字符串

  1. 数值、布尔值、对象和字符串值(返回字符串的一个副本)都有toString()方法。但null和undefined没有这个方法,可以传递一个参数:输出数值的基数。

  2. 转型函数String()

  • 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;

  • 如果值是null,则返回”null”;

  • 如果值是undefined,则返回”undefined”。

Object类型

对象可以通过new操作符创建:var o = new Object();
Object的每个实例都具有下列属性和方法:

  • constructor:保存着用于创建当前对象的函数。

  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。其中,作为参数的属性名(propertyName)必须以字符串的形式指定。

  • isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型。

  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举

  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。

  • toString():返回对象的字符串表示。

  • valueOf():返回对象的字符串、数值或布尔值表示。通常与toString()方法的返回值相同。

操作符

一元操作符

只能操作一个值的操作符叫做一元操作符

  • 执行前置递增和递减操作时,变量的值都是在语句被求值以前改变的(副效应)。

  • 在对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个值执行转换

布尔操作符

布尔操作符共有三个:非(!)、与(&&)、或(||)。

同时使用两个逻辑非操作符,实际上就会模拟Boolean()转型函数的行为

乘性操作符

如果参与乘性计算的某个操作数不是数值,后台会先使用Number()转型函数将其转换为数值。

加性操作符

对于加法操作符(+)来说:

  • 如果两个操作数都是字符串,则将第二个操作数与第一个操作数拼接起来;

  • 如果只有一个操作数是字符串,则将另一个操作数转换为字符串,然后再将两个字符串拼接起来

  • 如果有一个操作数是对象、数值、或布尔值,则调用他们的toString()方法取得相应的字符串的值,再应用前面关于字符串的规则;

  • 对于undefined和null,则分别调用String()函数并取得字符串”undefined”和”null”;

  • 每个加法操作都是独立执行的

对于减法操作符(-)来说:

  • 如果有一个操作数是字符串、布尔值、null或undefined,则现在后台调用Number()函数将其转换为数值,然后再根据前面的规则执行减法计算。如果转换的结果是NaN,则减法的结果就是NaN;

  • 如果有一个操作数是对象,则调用对象的valueOf()方法以取得表示该对象的数值。如果得到的值是NaN,则减法的结果就是NaN。如果对象没有valueOf()方法,则调用其toString()方法并将得到的字符串转换为数值;

关系操作符

当关系操作符使用了非数值时:

  • 如果两个操作数都是字符串,则比较两个字符串中对应位置的每个字符的字符编码值;

  • 如果一个操作数是数值,则将另一个操作数转换为一个数值,然后执行数值比较;

  • 如果一个操作数是对象,则调用这个对象的valueOf()方法,用得到的结果按照前面的规则进行比较。如果对象没有valueOf()方法,则调用toString()方法,并用得到的结果根据前面的规则执行比较;

  • 如果一个操作数是布尔值,则先将其转换为数值,然后再执行比较;

任何操作数与NaN进行关系比较,结果都是false

相等操作符

相等和不相等:先转换再比较;全等和不全等:仅比较而不转换

相等和不相等(==、!=)

在转换不同的数据类型时,遵循以下规则:

  • 如果有一个操作数是布尔值,则在比较相等性之前先将其转换为数值:false转换为0,而true转换为1;

  • 如果有一个操作数是字符串,另一个操作数是数值,在比较相等性之前先将字符串转换为数值;

  • 如果一个操作数是对象,另一个操作数不是,则调用对象的valueOf()方法,用得到的基本类型值按照前面的规则进行比较

这俩操作符在进行比较时要遵循:

  • null == undefined;

  • 要比较相等性之前,不能将null和undefined转换成其他任何值;

  • 如果有一个操作数是NaN,则相等操作符返回false,不相等操作符返回true。即使两个操作数都是NaN,相等操作符也返回false;因为按照规则,NaN不等于NaN;

  • 如果两个操作数都是对象,则比较它们是不是同一个对象。如果两个操作数都指向同一个对象,则相等操作符返回true,否则返回false;

全等和不全等(===、!==)

它只在两个操作数未经转换就相等的情况下返回true;

null === undefined // false

语句

if语句

  • 解析器会自动调用Boolean()转换函数将条件表达式的结果转化为一个布尔值;

  • 条件操作符:variable = boolean_expression ? true_value : false_value;

循环语句

  • do-while语句是一种后测试循环语句,即只有在循环体中的代码执行之后,才会测试出口条件。在对条件表达式求值之前,循环体内的代码至少会被执行一次。

  • while语句属于前测试循环语句,也就是说,在循环体内的代码被执行之前,就会对出口条件求值。因此循环体内代码有可能永远不会被执行。

  • 使用while循环做不到的,使用for循环同样也做不到。可以说for循环只是把与循环有关的代码集中在了一个位置

  • for-in语句是一种精准的迭代语句,可以用来枚举对象的属性

break和continue

  • break语句会立即退出循环,强制继续执行循环后面的语句;

  • continue语句虽然也是立即退出循环,但退出循环后会从循环的顶部继续执行;

with

  • with语句的作用是将代码的作用域设置到一个特定的对象中;

  • 定义with语句的目的主要是为了简化多次编写同一个对象的工作;

  • 严格模式下不允许使用with语句;

switch语句

  • 省略break关键字,会导致执行完当前case后,继续执行下一个case;

  • default关键字用于在表达式不匹配前面任何一种情形的时候,执行代码(相当于else);

  • switch语句在比较值时使用的是全等操作符,因此不会发生类型转换;

函数

  1. 任何函数在任何时候都可以通过return语句后跟要返回的值来实现返回值

  2. 位于return语句之后的任何代码都永远不会执行

  3. return语句后也可以不带有任何返回值。在这种情况下,函数在停止执行后将返回undefined值。这种做法一般用在需要提前停止函数执行而又不需要返回值的情况。

  4. arguments对象是一个类数组对象,可以通过方括号语法访问它的每一个元素,也可以使用length属性来确定传递进来多少个参数。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/108937.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • IP地址的构成_IP地址由两部分组成

    IP地址的构成_IP地址由两部分组成1、什么是IP地址?IP地址是人们在Internet上为了区分数以亿计的主机而给每台主机分配的一个专门的地址,通过IP地址就可以访问到每一台主机。IP地址由4部分数字组成,每部分数字对应于8位二进制数字,各部分之间用小数点分开,如某一台主机的IP地址为:211.152.65.112。2、IP地址管理机构InternetIP地址由NIC(InternetNetworkInformat…

  • 【技能树】预备知识-Python简介「建议收藏」

    【技能树】预备知识-Python简介「建议收藏」目录简介发展历史发展历程GuidovanRossum(吉多·范罗苏姆)人物经历主要成就ABC语言GNU特点优点缺点和其他语言区别Hello,World!简介Python是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。Python的设计具有很强的可读性,相比其他语言经常使用英文关键字,其他语言的一些标点符号,它具有比其他语言更有特色语法结构。Python是一种解释型语言:这意味着开发过程中没有了编译这个环节。类似于PHP和Perl语言。Python是交互式语言

  • 如何使vmware虚拟机中的Redflag Linux操作系统能够上网?

    如何使vmware虚拟机中的Redflag Linux操作系统能够上网? 第一种情况:主机使用PPPOE拨号上网方法一:NAT方式1、先关闭虚拟机中的操作系统,回到虚拟机主界面双击主界面右上方的的“Ethernet”,弹出“NetworkAdapter”对话框,选择“NAT”2、启动虚拟机操作系统,设置IP为动态获取,即通过DHCP获得。此时虚拟机中的操作系统用的是主机的IP,主机能够上网,那么虚拟机也能。方法二:Host-only方式1

  • Java中的FileInputStream与FileOutputStream的基本使用详解[通俗易懂]

    Java中的FileInputStream与FileOutputStream的基本使用详解[通俗易懂]Javav中的FileInputStream与FileOutputStream的使用

  • Linux系统CUDA10.2+CUDNN安装教程

    Linux系统CUDA10.2+CUDNN安装教程Ubuntu18.04下安装CUDA10.2及对应的CUDNN的教程。

  • int* a和int *a_int和char的区别

    int* a和int *a_int和char的区别工作中经常碰到int8_t、int16_t、int32_t、int64_t、uint8_t、size_t、ssize_t等数据类型,所以有必要对此进行梳理。int_t同类int_t为一个结构的标注,可以理解为type/typedef的缩写,表示它是通过typedef定义的,而不是一种新的数据类型。因为跨平台,不同的平台会有不同的字长,所以利用预编译和typedef可以最有效的维护代码。…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号