基本语法

  • 语法部分必须都是英文符号
  • js代码由多条语句构成,每个语句用英文分号结束(并非强制要求)
  • js代码从上到下同步执行
  • js语言大小写敏感

输出语句

  • document.write,该语句用于将数据输出到页面
  • alert,该语句用于将数据用弹窗的形式显示到页面
  • console.log,该语句用于将数据显示到控制台

输入语句

  • prompt 该语句用于可输入框弹框的形式显示到页面

注释

  • 注释:提供给代码阅读者使用,不会参与执行
  1. 单行注释 //
  2. 多行注释 / /

变量

变量是一块内存空间,用于保存数据

计算机:CPU、内存、硬盘、输入输出设备。
内存:存取速度快,数据易丢失。
硬盘:存取速度慢,数据永久保存。
计算机程序的运行,仅与内存打交道。

变量声明和赋值

  • 变量声明 var a;这个叫做声明了一个叫做a的值;其中var是一个关键字
  • 赋值 a = 10;这里的=不叫等号,叫赋值;意思就是把10赋值给a
  • 综上所述进行结合就变成了 var a = 10; 就是在声明a变量的同时给a赋值了10;这个是语法糖。

单一var生命法

  • 例子:把var a = 100; var b = 200; var c = 300;变成了var a = 100,b = 200,c = 300; 同时进行多个变量声明的时候只需要用一个var,中间用‘,’隔开,结束用‘;’

命名规范(最好语义化命名):

  1. [必]只能以英文字母、下划线、$开头
  2. [必]其他位置可以出现数字、英文字母、下划线、$
  3. [必]不可以与关键字、保留词重复
  4. [选]标识符应该做到望文知义
  5. [选]如果有多个单词,使用驼峰命名法,单词首字母大写

大驼峰:每个单词首字母大写。
小驼峰:除第一个单词外,首字母大写。
目前,使用的标识符都是小驼峰命名法。、

语法规则

  1. 1、语句后面要用分号结束“;”但 function test(){},for(){},if(){}后面都不用加分号
  2. 2js 语法错误会引发后续代码终止,但不会影响其它 js 代码块
  3. 错误分为两种
  4. 1)低级错误(语法解析错误),不能写中文
  5. 2)逻辑错误(标准错误,情有可原,错的那个执行不了)

3、书写格式要规范,“= + / -”两边都应该有空格

  • 任何可以书写数据的地方,都可以书写变量
  • 若使用一个未声明的变量,会导致错误

例外:使用typeof得到类型时,可以是未声明的变量,得到的结果是undefined

  • JS中存在变量提升
    所有变量的声明,会自动的提到代码的最顶部
    但是,这种提升,不会超越脚本块。
    • JS中允许定义多个同名变量

同名变量,提升后会变成一个。

数据和数据类型

JS的数据类型

JS 中的数据类型主要分为两种 原始类型 和 引用类型

原始类型(基本类型)

原始类型指不可再细分的类型,属于栈数据
主要有:Number,String,Boolean,Nulln,Undefined

  1. Number 数字,例 var a = 123;
  2. // 了解:
  3. // 数字类型可以加上前缀,来表示不同的进制
  4. // 0:表示8进制
  5. // 0x:表示16进制
  6. // 0b: 表示2进制
  7. String 字符串,语言放双引号里,例 var a=”语言”,““是空串
  8. //字符串:一长串文本(0个或多个)
  9. // - 单引号 ''
  10. // - 双引号 ""
  11. // - 飘,`,叫做模板字符串
  12. // 在字符串中,如何表示一个特殊字符,可以使用转义符(\)`
  13. Boolean 布尔数字,就两个值,falsetrue
  14. // 布尔类型用于表达真或假两种状态
  15. // - true,表示真
  16. // - false,表示假
  17. undefined 是没有定义的,表示还没赋值,仅一个值 underfined
  18. null 代表空,占位用,用空值来覆盖

引用类型(属于堆数据)

主要有:Array(数组),Object,Function

  1. var arr = [1,2,3,4,5,false,”abc”]; //这是数组
  2. 例:var arr = [1];
  3. var arr1 = arr;
  4. arr.push(2);
  5. console.log(arr1);
  6. 答案:arr 1,2arr1 1,2
  7. 引用值是把第一个值放到第二个值里面,改第一个值,第二个值也改变
  8. var a = 10;var b = a;是 a 先取出 10copy 一份放到 b 里面,改变 a 的值,b 的值是不 变的,
  9. 再把 a=20;时 b 的值还是 10,不发生改变
  10. var arr = [1,2];var arr1 =arr;arr.push(3);
  11. 答案:这往[1,2]放 3arr arr1 都是[1,2,3]
  12. 引用值是在栈内存里面放堆的地址,拷贝的也是地址,所以改变 arrarr1 也变了
  13. var arr = [1,2]; var arr1 =arr; arr = [1,3];
  14. console.log(arr1)
  15. 答案:arr = [1,3];是新建了一个新的房间。arr1 1,2,现在是插入 新引入值”房间”,
  16. 会在堆里面重新申请一间房,并指向新房间

在变量中存放对象

  1. 对象: 是由多个基本类型组合而成
  2. var obj = { a:1,b:2 }; //对象是以key:value对的形式出现的
  3. //obj 中的 a 叫做 属性名 1 叫做 属性值
  1. 通过变量,读取对象中的某个属性
  1. 变量名.属性名

当读取的属性不存在时,会得到undefined

当读取属性的对象不存在(undefined 或 null)时,程序报错

  1. 通过变量,更改对象中的某个属性

当赋值的属性不存在时,会添加属性

  1. 删除属性
  1. delete 变量名.属性名;
  1. 属性表达式

给属性赋值,或读取属性时,可以使用下面的格式操作

  1. 对象变量["属性名"]
  • 某些属性名中包含特殊字符

实际上,JS对属性名的命名要求并不严格,属性可以是任何形式的名字

属性的名字只能是字符串,如果你书写的是数字,会自动转换为字符串

全局对象

JS大部分的宿主环境,都会提供一个特殊的对象,该对象可以直接在JS代码中访问,该对象叫做全局对象

在浏览器环境中,全局对象为window,表示整个窗口

全局对象中的所有属性,可以直接使用,而不需要写上全局对象名。

开发者定义的所有变量,实际上,会成为window对象的属性。

如果变量没有被赋值,则该变量不会覆盖window对象上的同名属性。

得到数据的类型

在数据前加上 typeof

js的bug(特征): typeof null,得到的是object

原始类型的变量,存放的具体的值

引用类型的变量,存放的是内存地址

凡是出现对象字面量的位置,都一定在内存出现一个新的对象

扩展知识:JS中的垃圾回收
垃圾回收机制,会定期的发现内存中无法访问到的对象,该对象称之为垃圾,垃圾回收器会在合适的时间将其占用的内存释放。