基本语法
- 语法部分必须都是英文符号
- js代码由多条语句构成,每个语句用英文分号结束(并非强制要求)
- js代码从上到下同步执行
- js语言大小写敏感
输出语句
- document.write,该语句用于将数据输出到页面
- alert,该语句用于将数据用弹窗的形式显示到页面
- console.log,该语句用于将数据显示到控制台
输入语句
- prompt 该语句用于可输入框弹框的形式显示到页面
注释
- 注释:提供给代码阅读者使用,不会参与执行
- 单行注释 //
- 多行注释 / /
变量
变量是一块内存空间,用于保存数据
计算机: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、语句后面要用分号结束“;”但 function test(){},for(){},if(){}后面都不用加分号
2、js 语法错误会引发后续代码终止,但不会影响其它 js 代码块
错误分为两种
1)低级错误(语法解析错误),不能写中文
2)逻辑错误(标准错误,情有可原,错的那个执行不了)
3、书写格式要规范,“= + / -”两边都应该有空格
- 任何可以书写数据的地方,都可以书写变量
- 若使用一个未声明的变量,会导致错误
例外:使用typeof得到类型时,可以是未声明的变量,得到的结果是undefined
- JS中存在变量提升
所有变量的声明,会自动的提到代码的最顶部
但是,这种提升,不会超越脚本块。- JS中允许定义多个同名变量
同名变量,提升后会变成一个。
数据和数据类型
JS的数据类型
JS 中的数据类型主要分为两种 原始类型 和 引用类型
原始类型(基本类型)
原始类型指不可再细分的类型,属于栈数据
主要有:Number,String,Boolean,Nulln,Undefined
Number 数字,例 var a = 123;
// 了解:
// 数字类型可以加上前缀,来表示不同的进制
// 0:表示8进制
// 0x:表示16进制
// 0b: 表示2进制
String 字符串,语言放双引号里,例 var a=”语言”,““是空串
//字符串:一长串文本(0个或多个)
// - 单引号 ''
// - 双引号 ""
// - 飘,`,叫做模板字符串
// 在字符串中,如何表示一个特殊字符,可以使用转义符(\)`
Boolean 布尔数字,就两个值,false,true
// 布尔类型用于表达真或假两种状态
// - true,表示真
// - false,表示假
undefined 是没有定义的,表示还没赋值,仅一个值 underfined
null 代表空,占位用,用空值来覆盖
引用类型(属于堆数据)
主要有:Array(数组),Object,Function
var arr = [1,2,3,4,5,false,”abc”]; //这是数组
例:var arr = [1];
var arr1 = arr;
arr.push(2);
console.log(arr1);
答案:arr 是 1,2。arr1 是 1,2。
引用值是把第一个值放到第二个值里面,改第一个值,第二个值也改变
var a = 10;var b = a;是 a 先取出 10,copy 一份放到 b 里面,改变 a 的值,b 的值是不 变的,
再把 a=20;时 b 的值还是 10,不发生改变
var arr = [1,2];var arr1 =arr;arr.push(3);
答案:这往[1,2]放 3,arr 和 arr1 都是[1,2,3]
引用值是在栈内存里面放堆的地址,拷贝的也是地址,所以改变 arr,arr1 也变了
var arr = [1,2]; var arr1 =arr; arr = [1,3];
console.log(arr1)
答案:arr = [1,3];是新建了一个新的房间。arr1 是 1,2,现在是插入 新引入值”房间”,
会在堆里面重新申请一间房,并指向新房间
在变量中存放对象
对象: 是由多个基本类型组合而成
var obj = { a:1,b:2 }; //对象是以key:value对的形式出现的
//obj 中的 a 叫做 属性名 1 叫做 属性值
- 通过变量,读取对象中的某个属性
变量名.属性名
当读取的属性不存在时,会得到undefined
当读取属性的对象不存在(undefined 或 null)时,程序报错
- 通过变量,更改对象中的某个属性
当赋值的属性不存在时,会添加属性
- 删除属性
delete 变量名.属性名;
- 属性表达式
给属性赋值,或读取属性时,可以使用下面的格式操作
对象变量["属性名"]
- 某些属性名中包含特殊字符
实际上,JS对属性名的命名要求并不严格,属性可以是任何形式的名字
属性的名字只能是字符串,如果你书写的是数字,会自动转换为字符串
全局对象
JS大部分的宿主环境,都会提供一个特殊的对象,该对象可以直接在JS代码中访问,该对象叫做全局对象
在浏览器环境中,全局对象为window,表示整个窗口
全局对象中的所有属性,可以直接使用,而不需要写上全局对象名。
开发者定义的所有变量,实际上,会成为window对象的属性。
如果变量没有被赋值,则该变量不会覆盖window对象上的同名属性。
得到数据的类型
在数据前加上 typeof
js的bug(特征): typeof null,得到的是object
原始类型的变量,存放的具体的值
引用类型的变量,存放的是内存地址
凡是出现对象字面量的位置,都一定在内存出现一个新的对象
扩展知识:JS中的垃圾回收
垃圾回收机制,会定期的发现内存中无法访问到的对象,该对象称之为垃圾,垃圾回收器会在合适的时间将其占用的内存释放。