一、标识符:

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 操作符定义的变量将成为定义该变量的作用域中的局部变量,例如:

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

错误如下:

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

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

 function test(){
message = "hi"; // 全局变量
}
test();
alert(message); // "hi"

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

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

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

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

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

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

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

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

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

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

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

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

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

浮点数:

 var floatNum1 = 1.1;
var floatNum2 = 0.1;
var floatNum3 = .1;//不推荐
var floatNum4 = 1.; // 小数点后面没有数字——解析为 1
var floatNum5 = 10.0; // 整数——解析为 10
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()方法,再测试返回值。
 alert(isNaN("10")); //false(可以被转换成数值 10)
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()函数中,第一个小数点有效。例如:
 var num4 = parseInt(22.5); //
var num3 = parseFloat("22.5"); //22.5
var num4 = parseFloat("22.34.5"); //22.34
  • parseFloat()始终都会忽略前导的零,而parseInt()可以识别出八进制与十六进制,还可以有第二个参数,用于标志用哪种进制进行解析,例如:
 var num5 = parseInt("070"); // 56(八进制数)
var num7 = parseInt("0xf"); // 15(十六进制数)
var num2 = parseFloat("0xA"); //
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属性确定传递进来多少个参数
  •  function doAdd(num1, num2) {
    arguments[1] = 10;
    alert(arguments[0] + num2);
    }

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

  • ECMAScript所有参数传递的都是值,没有引用传递
  • 没有重载,因为有arguments,不算做有真正的函数签名

JavaScript高级程序设计学习笔记第三章--基本概念的更多相关文章

  1. JavaScript高级编程学习笔记(第三章之一)

    继续记笔记,JavaScript越来越有意思了. 继续... 第三章:JavaScript基础 ECMAScript语法在很大程度上借鉴了C和其它类似于C的语言,比如Java和Perl. 大小写敏感: ...

  2. JavaScript高级程序设计---学习笔记(三)

    函数表达式 定义函数的方式有两种:一种是函数声明,另一种是函数表达式. 关于函数声明,它的一个重要特征就是函数声明提升,意思是在执行代码之前会先读取函数声明所以可以把函数声明放在调用它的语句后面. 而 ...

  3. JavaScript高级程序设计学习笔记第十三章--事件

    事件冒泡: IE 的事件流,事件开始时由最具体的元素(文档中嵌套层次最深的那个节点)接收,然后逐级向上传播到较为不具体的节点(文档).例如: <!DOCTYPE html> <htm ...

  4. JavaScript高级程序设计学习笔记第六章--面向对象程序设计

    1.ECMAScript没有类的概念,ECMA-262 把对象定义为:“无序属性的集合,其属性可以包含基本值.对象或者函数.”,有点类似于散列表 2.ECMAScript 中有两种属性:数据属性和访问 ...

  5. JavaScript高级程序设计学习笔记第五章--引用类型(函数部分)

    四.Function类型: 1.函数定义的方法: 函数声明:function sum (num1, num2) {return num1 + num2;} 函数表达式:var sum = functi ...

  6. JavaScript高级程序设计学习笔记第五章--引用类型

    一.object类型 1.创建object类型的两种方式: 第一种,使用构造函数 var person = new Object();或者是var person={};/与new Object()等价 ...

  7. JavaScript高级程序设计学习笔记第四章--变量、作用域和内存问题

    1.变量可能包含两种不同数据类型的值:基本类型值和引用类型值. 基本类型值指的是简单的数据段,而引用类型值指那些可能由多个值构成的对象. 2.变量复制 如果从一个变量向另一个变量复制基本类型的值,会在 ...

  8. JavaScript高级程序设计学习笔记第十一章--DOM扩展

    1.对 DOM 的两个主要的扩展是 Selectors API(选择符 API)和 HTML5 2.Selectors API Level 1 的核心是两个方法: querySelector()和 q ...

  9. JavaScript高级程序设计---学习笔记(一)

    今天,2017.3.17开始利用课余时间仔细学习<JavaScript高级程序设计>,将需要掌握的知识点记录下来,争取把书里的所有代码敲一遍并掌握. 1.标识符命名最好是第一个字母小写,剩 ...

随机推荐

  1. 32.10 使用模板更改控件的UI

    32.10  使用模板更改控件的UI 样式是改变WPF控件基本外形的非常好(且非常简单)的方式,它通过为窗口部件的特性设置建立一组默认的值,从而改变WPF控件的基本外形.但是,即使样式允许我们改变各种 ...

  2. UITableView的headerView和headerInsectionView

    UITableView有两个headerView:tableHeaderView.和headerInsectionView(组头视图).   给tableView添加这两个View:tableHead ...

  3. new() 和 make() 的区别

    https://github.com/Unknwon/the-way-to-go_ZH_CN/blob/master/eBook/07.2.md

  4. iOS 流布局 UICollectionView使用(简单使用)

    简介 UICollectionView是iOS6之后引入的一个新的UI控件,它和UITableView有着诸多的相似之处,其中许多代理方法都十分类似.简单来说,UICollectionView是比UI ...

  5. python 创建一个实例:步骤一 编写一个构造函数

    编写一个构造函数 #在python中,person 类的第一件是就是记录关于人员的基本信息,这叫做实例对象属性,并且它们通常通过给类方法函数中的self 属性赋值来创建. #赋给实力属性第一个值得通常 ...

  6. TCP黏包问题

    什么是黏包?什么情况下会出现黏包的情况?该如何避免黏包的情况? 首先来看一个例子 #服务端 import time from socket import * server = socket(AF_IN ...

  7. StreamWriter结合UTF-8编码使用不当,会造成BOM(Byte Order Mark )问题生成乱码(转载)

    问: I was using HttpWebRequest to try a rest api in ASP.NET Core MVC.Here is my HttpWebRequest client ...

  8. LeetCode:最接近的三数之和【16】

    LeetCode:最接近的三数之和[16] 题目描述 给定一个包括 n 个整数的数组 nums 和 一个目标值 target.找出 nums 中的三个整数,使得它们的和与 target 最接近.返回这 ...

  9. Java中String的设计

    String应用简介 前言 String字符串在Java应用中使用非常频繁,只有理解了它在虚拟机中的实现机制,才能写出健壮的应用,本文使用的JDK版本为1.8.0_111. 常量池 Java代码被编译 ...

  10. Google IO 2019 Android 太长不看版

    Google I/O 2019, 这里有个playlist是所有Android开发相关的session视频合集: Android & Play at Google I/O 2019 当然啦每个 ...