JavaScript高级程序设计学习笔记第三章--基本概念

一、标识符:

1.区分大小写

2.命名规则:

  • 第一个字符必须是一个字母、下划线(_)或一个美元符号($)
  • 其他字符可以是字母、下划线、美元符号或数字
  • 标识符中的字母也可以包含扩展的 ASCII 或 Unicode 字母字符(如 À 和 Æ) ,但不推荐这样做。
  • 不能把关键字、保留字、true、false和null用作标识符

3.书写方式:最好按照驼峰大小写格式书写,就是第一个字母小写,剩下的每个单词的首字母大写,但不强制这么做
二、注释(两种方式)

  1. 单行注释://
  2. 多行注释:/*……*/

三、严格模式:“use strict”,一个编译指示,用于告诉JavaScript编译器切换到严格模式

四、语句:

  1. 语句后的;可以省略,但不推荐
  2. 建议使用代码块,即使只有一条语句

五、关键字:break、do、instanceof、typeof、case、else、new、var、catch、finally、return、void、continue、for、switch、while、debugger*(第五版新增) function、this、with、default、if、throw、delete、in、try

六、保留字:abstract、enum、int、short、boolean、 export、nterface 、static、byte、 extends、long、 supe、char、 final、 native、 synchronized、class、 float、package、 throws、const 、goto、 private、 transient、debugger、 implements、protected、volatiledouble、import、 public、let、yield(第五版新增)

七、关键字与保留字不要作为标识符,最好的命名是有意义的命名,能够明确知道其代表的含义

八、变量:

  1. 占位符,可以保存任何类型数据
  2. 定义变量:使用var关键字,例如var message;,定义了一个message变量,使用 var 声明的变量会自动被添加到最接近的环境中。在函数内部,最接近的环境就是函数的局部环境;在 with 语句中,最接近的环境是函数环境。如果初始化变量时没有使用 var 声明,该变量会自动被添加到全局环境。
  3. 初始化变量:message="hi";

九、定义并初始化变量的两种方式:

  1. var message="hi";//包含两步,定义变量var message;初始化变量message="hi";
  2. var message;message="hi";
  3. 定义并初始化多个变量:var message = "hi",found = false,age = 29;

p.s 即用 var 操作符定义的变量将成为定义该变量的作用域中的局部变量,例如:

1 function test(){
2 var message = "hi"; // 局部变量
3 }
4 test();
5 alert(message); // 错误!

错误如下:

错误原因:因为message用var关键字定义,其作用域为function{……},而alert(message)要对message进行RHS,没有在全局作用域中找到其相应的值,所以会出现如上错误。

而下面的代码就不会出现上面的错误:

1 function test(){
2 message = "hi"; // 全局变量
3 }
4 test();
5 alert(message); // "hi"

原因:在调用函数test的时候,由于需要对message进行LHS,作用域中并没有定义message变量,所以会在全局作用域中定义一个message变量,这样的在执行alert(messsage)的时候就可以再全局作用域中找到一个message变量,它的值为hi。(关于LHS与RHS的具体内容可以参考我的另外一篇博客)

十、数据类型--五种简单数据类型(基本数据类型)

typeof操作符:用来检测变量的类型

  1. Undefined类型:Undefined 类型只有一个值,即特殊的 undefined,只定义未初始化的变量的值默认为undefined,例如:
1 var message;
2 alert(message == undefined); //true
3 
4 
5 var message = undefined;
6 alert(message == undefined); //true

p.s 定义未初始化的变量与未定义的变量使用typeof的结果同样都是undefined,但二者原理是不一样的,最好是显示的初始化变量,这样当返回值为undefined时,我们就可以确定该变量是没有被声明,而不是没有初始化

1 var message; // 这个变量声明之后默认取得了 undefined 值
2 // 下面这个变量并没有声明
3 // var age
4 alert(message); // "undefined"
5 alert(age); // 产生错误
6 alert(typeof message); // "undefined"
7 alert(typeof age); // "undefined

2.Null类型:只有一个值,就是null。null值表示一个空对象指针,使用typeof操作符时返回的值是object

p.s undefined 值是派生自 null 值的,alert(null == undefined); //true

3.Boolean类型:有两个值:true和false

Boolean():将一个值转换为其对应的Boolean值得函数,转换过程如下:

1 var message = "Hello world!";
2 var messageAsBoolean = Boolean(message);//true
数据类型 转换为true的值 转换为false的值
Boolean true false
String 任何非空字符 ""
Number 任何非零数字值(包括无穷大) 0和NaN(参见本章后面有关NaN的内容)
Object 任何对象 null
Undefined   undefined

4.Number类型:表示整数与浮点数

整数:默认为十进制,也可以表示八进制和十六进制

浮点数:

1 var floatNum1 = 1.1;
2 var floatNum2 = 0.1;
3 var floatNum3 = .1;//不推荐
4 var floatNum4 = 1.; // 小数点后面没有数字——解析为 1
5 var floatNum5 = 10.0; // 整数——解析为 10
6 var floatNum6 = 3.125e7; // 等于 31250000

数值范围:

  • 最小值:Number.MIN_VALUE 
  • 最大值:Number.MAX_VALUE 
  • 超过范围时,将会转换为Infinity与-Infinity,不能用于进行计算
  • isFinite()函数:用于检测是否在最大值与最小值之间

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

  • 任何涉及 NaN 的操作(例如 NaN/10)都会返回 NaN
  • NaN 与任何值都不相等,包括 NaN 本身,如alert(NaN == NaN); //false
  • isNaN()函数:确定函数参数是否“不是数值”,如果不是数值返回true,是数值返回false。这个函数其实还很容易混淆的。运用这个函数还需要对参数进行类型转换。isNaN()确实也适用于对象。在基于对象调用 isNaN()函数时,会首先调用对象的 valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用 toString()方法,再测试返回值。
1 alert(isNaN("10")); //false(可以被转换成数值 10)
2 alert(isNaN(true)); //false(可以被转换成数值 1)

数值转换:有三个函数可以把非数值转换为数值: Number()、 parseInt()和 parseFloat()

  • Number():可以用于任何数据类型,转换规则:
    • 如果是 Boolean 值, true 和 false 将分别被转换为 1 和 0。
    • 如果是数字值,只是简单的传入和返回。
    • 如果是 null 值,返回 0。
    • 如果是 undefined,返回 NaN。
    • 如果是字符串,遵循下列规则:
      • 如果字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即"1"会变成 1, "123"会变成 123,而"011"会变成 11(注意:前导的零被忽略了,八进制不能这样正常转化为十进制);
      • 如果字符串中包含有效的浮点格式,如"1.1",则将其转换为对应的浮点数值(同样,也会忽略前导零);
      • 如果字符串中包含有效的十六进制格式,例如"0xf",则将其转换为相同大小的十进制整数值;
      • 如果字符串是空的(不包含任何字符),则将其转换为 0;
      • 如果字符串中包含除上述格式之外的字符,则将其转换为 NaN。
    • 如果是对象,则调用对象的 valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是 NaN,则调用对象的 toString()方法,然后再次依照前面的规则转换返回的字符串值。
  • parseInt()函数:从第一个字符(位置 0)开始解析每个字符。会忽略字符串前面的空格,直至找到第一个非空格字符(遇到空字符串会返回NaN)
    • 如果第一个字符不是数字字符或者负号, parseInt()就会返回 NaN
    • 如果第一个字符是数字字符, parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符
  • parseFloat()函数:从第一个字符(位置 0)开始解析每个字符。而且也是一直解析到字符串末尾,或者解析到遇见一个无效的浮点数字字符为止。

parseInt()与parseFloat()函数的区别:

  • 在parseInt()函数中,第一个小数点无效,在parseFloat()函数中,第一个小数点有效。例如:
1 var num4 = parseInt(22.5); // 22
2 var num3 = parseFloat("22.5"); //22.5
3 var num4 = parseFloat("22.34.5"); //22.34
  • parseFloat()始终都会忽略前导的零,而parseInt()可以识别出八进制与十六进制,还可以有第二个参数,用于标志用哪种进制进行解析,例如:
1 var num5 = parseInt("070"); // 56(八进制数)
2 var num7 = parseInt("0xf"); // 15(十六进制数)
3 var num2 = parseFloat("0xA"); //0
4 var num5 = parseFloat("0908.5"); //908.5

5.String类型:表示由零或多个 16 位 Unicode 字符组成的字符序列.

  • 使用""或者''都可以。
  • 特殊字面量需要用转义字符
  • 字符串的不可变性

转换为字符串的方法:toString()函数和String()函数。

toString()可以传递一个参数:基数.

null和undefined没有toString()方法,有String()方法。

 6.Object类型:

创建对象的方法:var o=new object();或者var o={};

每个对象都具有的属性与方法:

  • constructor:保存着用于创建当前对象的函数。
  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而不是在实例的原型中)是否存在。
  • isPrototypeOf(object):用于检查传入的对象是否是传入对象的原型
  • propertyIsEnumerable(propertyName):用于检查给定的属性是否能够使用 for-in 语句来枚举。
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应。
  • toString():返回对象的字符串表示。
  • valueOf():返回对象的字符串、数值或布尔值表示。通常与 toString()方法的返回值相同。

7.操作符:

  • ++,--,分为前置与后置
  • +,-:二者放在数值前面不会产生变化,放在非数值前面,则会先按照Number()函数的转换规则,+不会产生变换,-会变成负数
  • 位操作符:左移>>,右移<<
  • 布尔操作符:逻辑非(!),逻辑与(&&),逻辑或(||)
  • 乘性操作符:*
  • 除法:/
  • 取余:%
  • 加法与减法:+,-
  • 关系操作符:<=,>=,<,>
  • 相等操作符:==(类型转换),===(类型不转换)
  • 条件操作符:?:
  • 逗号操作符:",",用于声明多个变量,也可以用于赋值,赋值的话会返回表达式的最后一个值

8.语句:

  • if
  • do-while
  • while
  • for(;;):三个表达式都是可选的
  • for in
  • label
  • break与continue
  • with
  • switch

9.函数:

  • function关键字定义
  • return语句后面的语句都不会被执行
  • 函数可以通过arguments 对象来访问这个参数数组,从而获取传递给函数的每一个参数。
  • arguments并不是Array的实例,只是与数组类似,可以通过方括号语法来访问属性值,通过length属性确定传递进来多少个参数
  • 1 function doAdd(num1, num2) {
    2 arguments[1] = 10;
    3 alert(arguments[0] + num2);
    4 }

    第二个参数num2改成10,num2与arguments[1]访问的不是同一处的存储空间,但二者的值会保持同步。

  • ECMAScript所有参数传递的都是值,没有引用传递
  • 没有重载,因为有arguments,不算做有真正的函数签名
原文地址:https://www.cnblogs.com/yangxiaoguai132/p/5180967.html