JavaScript
一、 引入方式 1.内部标签使用,中直接写
<script>
alert('hello world')
</script>
2.外部引入 <script src="demo01.js"></script>
网页控制台可以直接拿来调试 例如 控制网页的视频倍速: document.querySelector('video').playbackRate = 2.2; 在控制台输出变量 console.log(变量名)
二、基础定义与操作 'use strict' 严格模式 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为
var score = 66;
var name = "lihuan"
数据类型: 1. number js不区分整数和浮点数
666
666.66
1.23e3
-22
NaN
Infinity
console.log((1/3) === (1-2/3)) 为false,浮点数存在精度丢失问题 应使用Math.abs((1/3) - (1-2/3)<0.00000001)
2. string 字符串 可以使用单引号或双引号
var name="Lilie";
var name='Hanmeimei';
运用:
'use strict'
var msg = `hello
world
你好
吖`
let name = "lihuan";
let age = 20
let add = `你好,${name},我今年 ${age+1}`
var vscode = "vsCode";
console.log(`字符串长度= ${vscode.length}`);
console.log(vscode[0]);
console.log(vscode.toLowerCase());
console.log(vscode.toUpperCase());
console.log(vscode.indexOf('o'));
console.log(vscode.substring(1));
console.log(vscode.substring(1,3));
3. 布尔值
true
false
4.逻辑运算
&& 与
|| 或
! 非
5.比较运算
= 赋值
== 等于(类型不一样,值一样,判断为true)
=== 绝对等于(类型一样,值一样,判断为true)
尽可能不使用== NaN-==NaN,这个与所有的数值都不相等,包括自己只能通过isNaN[NaN) 来判断这个数是否是NaN
6. null 和 undefined
7.数组
var name=["zs","ls",null,1,true];
var s=new Array();
s[0]="aa";
var ss=new Array("zs","ls",null,1,true);
越界为undefined
运用:
var arr = [1,2,3,4,5,6];
console.log(arr);
console.log(arr.length);
arr.length = 10;
console.log(arr)
var a = [1,2,3,"1","22".length]
console.log(a);
console.log(a.indexOf(1));
console.log(a.slice(1,3));
a.push('a','b');
console.log(`新的数组为${a}`);
a.pop();
console.log(`新的数组为`+a);
a.unshift('c');
console.log(`新的数组为${a}`);
a.shift();
console.log("新的数组为"+a);
a.sort();
a.concat([7,8,9]);
arr.join('-');
qaq = [[1,2],[3,4],["a","b"]];
8.对象 对象由花括号分隔。在括号内部,对象的属性以名称和值对的形式 (name : value) 来定义。属性由逗号分隔
- 对象是大括号,数组是中括号
- 每个属性之间使用逗号隔开, 最后一个不需要添加
运用:
var person={
firstname : "hua",
lastname : "li",
id : 666,
age : 21
};
delete person.age;
console.log(person);
person.age = 20;
console.log(person);
console.log('age' in person);
console.log(person.hasOwnProperty('age'));
console.log(person.hasOwnProperty('toString'));
name=person.lastname;
9.Map和Set
var map = new Map([["carl",90],["tom",88],["jack",89]]);
var name = map.get("tom");
map.set('root',123);
map.delete('carl');
set:无需不重复集合
var set = new Set([3,1,1,1,1]);
set.add(2);
set.delete(1);
set.has(3);
迭代:
var arr = [1,2,3,4,5];
for(var x of arr){
console.log(x);
}
var map = new Map([["carl",90],["tom",88],["jack",89]]);
for(let y of map){
console.log(y);
}
var set = new Set([5,6,7]);
for(let z of set){
console.log(y);
}
三、函数 定义:
function myFunction(var1,var2)
{
代码
}
function myFunction()
{
var x=5;
return x;
}
获取参数:
function allnum(a,b,...rest){
console.log("a->"+a);
console.log("b->"+b);
console.log("其他剩下的参数->"+rest);
}
var qaq = function(x){
console.log("x->"+x)
for (var i = 0; i<arguments.length; i++){
console.log(arguments[i]);
}
return x;
}
变量的作用域: 在javascript中,var 定义变量实际是有作用域的。
局部变量:
- 假设在函数体中声明,则在函数体外不可以使用。(可用闭包实现)
- 如果两个函数使用了相同的变量名,只要在函数内部,就不冲突
- 内部函数可以访问外部函数的成员,反之则不行
- 假设,内部函数变量和外部函数的变量 重名 ! 函数查找变量从自身函数开始,由“内"向“外"查找,. 假设外部存在这个同名,的函数变量,则内部函数会屏蔽外部函数的变量。
- js执行引擎,自动提升了y的声明,但是不会提升变量y的赋值
全局变量:
- 变量在函数外定义,即为全局变量。
- 默以所有的全局变量,都会自动绑定在window对象下
由于我们所有的全局变量都会绑定到我们的window上。如果不同的js文件,使用了相同的全局变 量,就会发生冲突? 开发规范:
var daydayStudy = {};
daydayStudy.name = "dayday";
daydayStudy.add = function(a,b){
return a+b;
}
局部作用域中使用let 常量const
四、方法 方法就是把函数放在对象的里面,对象只有两个东西:属性和方法
var daydayStudy = {
name:"carl",
birth:2000,
age: function(){
var now = new Date().getFullYear();
return now-this.birth;
}
}
可用 apply 控制 this 的指向:
function getAge(){
var now = new Date().getFullYear();
return now-this.birth;
}
var daydayStudy = {
name:"carl",
birth:2000,
age:getAge
}
getAge.apply(daydayStudy,[]);
json
var user = {
name : "dayday",
age : 21,
sex : "男"
}
var jsonUser = JSON.stringify(user);
var obj = JSON.parse('{"name" : "dayday","age" : 21,"sex" : "男" }')
五、继承 1.原型继承 __proto__
var user = {
name : "dayday",
age : 21,
sex : "男"
};
var zhangsan = {
name : "zhangsan",
run : function(){
console.log(this.name+"run---------");
}
}
zhangsan.__proto__ = user;
2.class继承
class Student{
constructor(name){
this.name = name;
}
hello(){
alert("hello");
}
}
class good extends Student{
constructor(name,grade){
super(name);
this.grade = grade;
}
sayhello(){
alert("say");
}
}
var zhangsan = new Student("zhangsan");
var lisi = new good("lisi");
|