浏览器环境中,代码书写位置
- 直接书写到页面中的script元素的内部
- 书写到外部的js文件,在页面中引用 [推荐]
代码分离:内容、样式、功能,三者分离,更加容易维护和阅读
- 页面中,可以存在多个script元素,执行顺序从上到下
- 如果一个script元素引用了外部文件,内部不能书写任何代码
- script元素有一个可选的属性,type,该属性用于指定代码的类型,该属性值是MIME格式
这里有一个注意点,一般js的脚本都写在body里面元素创建完之后。但是可以通过加defer延迟加载写在head里面
认识基本语法
- 语法部分必须都是英文符号
- js代码由多条语句构成,每个语句用英文分号结束(并非强制要求)
- js代码从上到下同步执行
- js语言大小写敏感
认识输出语句
所有的输出语句都不是ES标准。
- document.write,该语句用于将数据输出到页面
- alert,该语句用于将数据用弹窗的形式显示到页面
- console.log,该语句用于将数据显示到控制台
认识输入语句
所有的输入语句都不是ES标准
认识注释
注释:提供给代码阅读者使用,不会参与执行
- 单行注释 //
- 多行注释 /* */
在VSCode中,使用快捷键 ctrl + /,可以快速添加和取消单行注释 使用快捷键 alt + shift + a,可以快速添加和取消多行注释
格式化代码
alt + shift + f 格式化代码
数据和数据类型
数据:有用的信息
数据类型:数据的分类
本节课学习的是:不同类型的数据的字面量表示法
JS中的数据类型
学习JS中,不同数据类型的数据的书写方式
原始类型(基本类型)
原始类型指不可再细分的类型
- 数字类型 number
直接书写即可
数字类型可以加上前缀,来表示不同的进制 0:表示8进制 0x:表示16进制 0b: 表示2进制
- 字符串类型 string
字符串:一长串文本(0个或多个)
- 单引号 '
- 双引号 "
- 飘,`,叫做模板字符串
在字符串中,如何表示一个特殊字符,可以使用转义符(\)
- 布尔类型 boolean
布尔类型用于表达真或假两种状态
- true,表示真
- false,表示假
- undefined类型
表示未定义,不存在。
只有一种数据书写方式:undefined
- null类型
表示空,不存在。
只有一种数据书写方式:null
区分某些长数字和字符串: 如果按照数字的方式阅读,则使用数字类型;否则使用字符串类型
undefined 与 null
undefined 未定义 null 表示空,不存在
undefined ,null 的区别是:打一个比方。你去教室占位置,有个座位没有人占,算是undefined。如果有人占了但是还没有来,算null。其实意思都差不多的。
引用类型
引用类型有两种:
- 对象 object (事物,东西,玩意儿)
可以认为,对象,是由多个基本类型组合而成。 对象的书写方式
{
name: "姬成",
nickName: "成哥",
age: 108,
gender: true, //true表示男,false表示女
address: {
country: "中国",
province: "黑龙江",
city: "哈尔滨",
detail: "那嘎达二街11号"
},
girlFriend: undefined
}
属性:对象的成员
- 函数(后续章节专门讲解)
得到数据的类型
在数据前加上 typeof
js的bug(特征): typeof null,得到的是"object"
typeof 获取到的是字符串的
字面量
直接书写的具体的数据,叫做字面量
变量
什么是变量
变量是一块内存空间,用于保存数据
计算机:CPU、内存、硬盘、输入输出设备 内存:存取速度快,数据易丢失 硬盘:存取速度慢,数据永久保存 计算机程序的运行,仅与内存打交道
如何使用变量
- 声明(定义)变量
var 变量名;
变量声明后,它的值为undefined
- 给变量赋值
向变量的内存空间中存放数据
- 变量的值是可变的
变量可以被重新赋值,新的值会覆盖原来的值
- 变量的名称
在开发中,凡是需要自行命名的位置,叫做标识符
标识符的规范:
1) [必]只能以英文字母、下划线、 3) [必]不可以与关键字、保留词重复 4) [选]标识符应该做到望文知义 5) [选]如果有多个单词,使用驼峰命名法,单词首字母大写
大驼峰:每个单词首字母大写 小驼峰:除第一个单词外,首字母大写 目前,使用的标识符都是小驼峰命名法。
宽度:width,高度:height,区域:area (quyu)
- 声明和赋值合并
变量的声明和赋值可以一条语句书写。
这是语法糖。
语法糖仅仅是为了方便代码书写或记忆,并不会有实质性的改变。
- 多个变量可以合并声明并赋值
// var a;
// var b;
// var c;
// a = 1;
// b = 2;
// c = 3;
// 等效于
// var a, b, c;
// a = 1;
// b = 2;
// c = 3;
// 等效于
var a = 1,
b = 2,
c = 3,
d;
语法糖
-
任何可以书写数据的地方,都可以书写变量
-
若使用一个未声明的变量,会导致错误
例外:使用typeof得到类型时,可以是未声明的变量,得到的结果是undefined
- JS中存在变量提升
所有变量的声明,会自动的提到代码的最顶部
但是,这种提升,不会超越脚本块。就是script 标签之间。
- JS中允许定义多个同名变量
同名变量,提升后会变成一个。
变量和对象
原始类型:number、string、boolean、null、undefined
引用类型:object、function 函数
在变量中存放对象
- 通过变量,读取对象中的某个属性
a.通过点语法
变量名.属性名
b.变量名中括号的方式读取 除了上面的读取方法,还可以通过 变量名["属性名"] 去访问
当读取的属性不存在时,会得到undefined
var a ={};
console.log(a.n);
会得到上面的undefined
当读取属性的对象不存在(undefined 或 null)时,程序报错
var b;
console.log(b.c);
报错如下:
at <anonymous>:1:15
- 通过变量,更改对象中的某个属性
当赋值的属性不存在时,会添加属性
- 删除属性
delete 变量名.属性名;
- 属性表达式
给属性赋值,或读取属性时,可以使用下面的格式操作
对象变量["属性名"]
- 某些属性名中包含特殊字符
实际上,JS对属性名的命名要求并不严格,属性可以是任何形式的名字
属性的名字只能是字符串,如果你书写的是数字,会自动转换为字符串
var obj = {};
// 宿主环境会自动将数字转换为字符串
obj[0] = "123"; // { "0": "123" }
obj["0"] = "234"; // { "0": "234" }
console.log(obj[0], obj["0"]);
全局对象
JS大部分的宿主环境,都会提供一个特殊的对象,该对象可以直接在JS代码中访问,该对象叫做全局对象
在浏览器环境中,全局对象为window,表示整个窗口
全局对象中的所有属性,可以直接使用,而不需要写上全局对象名。
开发者定义的所有变量,实际上,会成为window对象的属性。
如果变量没有被赋值,则该变量不会覆盖window对象上的同名属性。
一个特殊的例子
var name = null; // name属性比较特殊,赋值的任何内容,都会被转换为字符串
console.log(name);
console.log(typeof name);
// var console = undefined;
// alert(window.console); //由于,console有赋值,因此,覆盖了window的属性console
// var console;
// console.log(console); //由于,console没有赋值,因此,没有覆盖window的属性console
引用类型
原始类型 引用类型(对象、函数)
原始类型的变量,存放的具体的值
引用类型的变量,存放的是内存地址
凡是出现对象字面量的位置,都一定在内存出现一个新的对象
扩展知识:JS中的垃圾回收 垃圾回收器,会定期的发现内存中无法访问到的对象,该对象称之为垃圾,垃圾回收器会在合适的时间将其占用的内存释放。
补充在JS中,变量在使用时可以不写var,不写var直接赋值,相当于给window的某个属性直接赋值
<script>
a = 1;
console.log(a, window.a);
</script>