js 是什么?
js: JavaScript的简称
1.1 js的版本:ES5,ECAA2015,也就是大家常说的ES6
1.2 ECMA2016,ECMA2017,….ECMA2020
1.3 ES6+,ES6是一个大的概念JS:是异步的单线程的脚本语言
2.1 脚本:边解释边执行,控制台是一个浏览器内置的JS代码的解释执行程序
2.2 脚本语言(php,python..),动态解释并直接执行
2.3 编译语言(c/c++/java…),静态编译的语言单线程:就是同一个时间执行一个任务(不能并发),一旦遇到非常耗时的任务,就会阻塞。
异步:js是基于时间驱动的语言,通过事件循环来完成
4.1 事件回调方法并不会马上执行,他依赖于某个时间的到来 这些事件
4.2 的回调方法在“任务队列”中等着setTimeout(); 定时器
console.log(); 可以在浏览器查看打印结果
主线程中的程序:
console.log(1);
console.log(3);
console.log(5)
回调中又
setTimeout(()=>console.log(2));
setTimeout(()=>console.log(4));
这样会慢半拍,原因是内容输出是在主线程上执行
<input tyoe="text" onkeydown="console.log(this.value)">
此时,将内容输出到控制台的代码不在主线程执行,而是在任务队列中
<input type="text" onkeydown="setTimeout(()=>console.log(this.value))>
Js 引入方式
- 直接写到html的事件属性中
1.1 事件属性:针对事件定义它的回调方法,它的值是Js代码
1.2 事件睡醒:on+事件名称,点击事件:onclick
<buttononclick="console.log(this.innerHTML);this.style.background='red></buttton>
- 通常会要求:将html,css,js 三者分离
- 脚本,将js保存为一个单独的js文件,再通过script标签引入到当前html文档中
1.1 引入外部: 首选
<script src="地址"></script>
- 如果说这个js脚本只在当前html文档中使用
<button>点我</button>
<script>
//仅在当前html文档中使用js代码
const btn = document.querySelector('button');
btn addEventListener('click',show);
function show(ev){
console.log(ev.target.innerHTML);
ev.target.style.background = "linghtsky';
}
变量和常量
- 变量
// 声明
let username;
// 认值: undefined
console.log(username);
// 初始化:第一次赋值
usernmae = "张三";
console.log(usernmae);
// 更新,第二次以上的赋值
username = "李四”;
console.log(username);
// let 禁止重复声明
// 将变量与初始化同步完成
// 变量是可以将声明与初始化分成两步完成
let emali="20000@qq.com"
- 常量
- 常量是特殊的变量:只读变量
1.1 常量声明后既不能删除也不能更新
1.2 常量的声明与初始化必须同步完成
const APP="管理系统”;
- 常量,变量,函数名…都叫js标识符
2.1 只能字母,数字,下划线,$,且第一个不能是数字
2.2 标识符是严格区分大小写的
2.3 命名规范
2.4 首选const常量,其次考虑let
// 蛇形
let user_name="zhangsan";
// 驼峰式
let userName="lisi;
// 大驼峰,帕斯卡
let UserName="xiaoming";
// 匈牙利
let oBody = document.body;
oBody.style.background ="red";
数据类型
- 两种类型:原始类型,引用类型
原始类型: 都是值传递
// 数值: 整数和小数
let age = 38;
console.log(age,typeof age);
// 字符串
let emali = "2000@qq.com";
console.log(emali,typeof email);
// 布尔
let isMarried = true;
console.log(isMarried,typeof isMarried);
// undefined 未初始化变量的类型
let gender;
console.log(gender,typeof gender);
// null, 空对象
let obj = null;
console.log(obj,typeof null);
// 符号,创建对象属性的唯一标识
let s Symbol('custom symbol');
console.log(s,typeof s);
// 原始类型都是值传递的
let a = 100;
// 将变量的a的值,传递到了b;
let b = a;
console.log(b);
let a = 200;\
console.log(b);
// a的更新不会影响到b
类型,对象,数组,函数
1.1 他们都是引用传递
1.2 对象字面量
对象字面量
let user = {
// 属性,相当于变量
id:1,
name:'lisi',
'my email':'ty@qq.con',
// 方法:函数
getName:function(){
//this表示当前的上下文,当前对象
return '我的名字:'+ this.name;
}
}
console.log(user.id,user.name);
console.log(user['my email']);
console.log(user.getName());
数组
let course = [1,'js',88];
console.log(conrse,typeof couyse);
// 正常情况下,检查数组返回对象
console.log(course instanceof Array);
console.log(course instanceof object);
//不用上面的 instanceof ,以后可以使用isAarray
console.log(Array.isArray(conuse));
// 数组中的元素索引是从0 开始,按索引来访问元素
console.log(course[1]);
函数
function hello(){}
console.log(hello,typeof hello);
console.log(hello,instanceof Object);
// 对象是属性的无序集合,对象可以添加属性
hello.email = '2000@qq.cn';
console.log(hello.email);
//