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属性来肯定通报进来多少个参数。

    原文作者:多喝热水早点睡
    原文地址: https://segmentfault.com/a/1190000006041592
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞