JavaScript知识总结(一)

目录

1. 四种输出方式

2. 两大数据类型

3. 数据类型转换

4. 三种变量的区别

5.  七种运算符


1. 四种输出方式

(1)弹出警告框  window.alert() 

(2)写入HTML文档  document.write() 

(3)写入HTML元素  document.getElementById.innerHTML="" 

(4)写入浏览器控制台  console.log() 

2. 两大数据类型

(1) 基本数据类型(值类型):字符串(String)、数字(Number)、布尔(Boolean)、空(Null)、未定义(Undefined)、独一无二(Symbol)     栈内存 

注: 0/0为NaN(非数字),正数/0为infinity(正无穷大),负数/0为-infinity(负无穷小)

typeof(NaN)==> Number,typeof(null) ==> Object,typeof(undefined) ==> undefined

/* 字符串 以字符数组的形式保存 */
var str = "12";
//方法
str.concat('');    //拼串
str.slice(start,end);    //提取部分substr() substring(start,end)
str.indexOf('');    //第一次出现位置
str.lastIndexOf('');    //最后一次出现的位置
str.startsWith('');    //是否以开头
str.endsWith('');    //是否以结尾
str.toUpperCase();    //转换为大写
str.toLowerCase();    //转换为小写
str.charAt(index);    //返回指定位置的字符
str.split(",");    //将字符串拆分为数组
str.trim();    //移除字符串首尾空白
//字符串模板与字符串插值
var m = `${}`;

/* 数字 */
var num = 1;

/* 布尔 */
var bool1 = true;
var bool0 = false;

/* 空 */
var n = null;

/* 未定义 */
var undef;

/* 非数字 */
var nan = str-undef; 

(2)引用数据类型(对象类型):对象(Object)、数组(Array)、函数(Function)、正则(RegExp)、日期(Date)     堆内存 

对象:

/* 对象 */
var obj = {
    //属性
    firstName:"Liang",
    lastName:"tutu",
    //方法
    fullName:function(){
        return this.firstName+" "+this.lastName;
    }
    //访问器getter和setter
    get fulName(){
        return this.firstName+" "+this.lastName;
    }
    set lastame(last){
        this.lastName = last;
    }
};
//读取属性(两种寻址方式)
obj.firstName;
obj["lastName"];
//以函数形式访问
obj.fullName();
//以属性形式访问
obj.fulName;
//遍历对象的属性
for(i in obj){
    console.log(obj[i]);
}
//添加属性
obj.sex = "男";
//添加方法
obj.f = function(){};
// 删除属性
delete obj.sex;
//修改属性
obj.sex = "女";

/* 对象显示:若直接输出obj则显示为Object */
var arr = obj.values();
var str = JSON.stringify(obj);

/* 对象方法 */
//更改或添加属性值
Object.defineProperty(obj,"lastName",{value:"kaka"});
//添加getter和setter
Object.defineProperty(obj,"fullName",{get:function(){}});

/* 构造器 */
// 通过构造函数创建类
function Person(name,sex){
    this.name=name;
    this.sex=sex;
}
// 创建类的实例--对象
var p = new Person("haha","女");

/* 原型 prototype属性:为对象构造器添加新属性或新方法*/
Person.prototype.age = 17;
Person.prototype.f = function(){};

数组: 

/* 数组 */
var arr1 = [1,2,7];
var arr2 = [1,2,6,9];
/* 方法 */
//搜索数组中的元素,并返回它第一次出现的位置;若找不到,则返回-1。
arr1.indexOf(item,startIndex);
//将数组转换为一个字符串,默认以,隔开 
arry.join("#");  
//连接两个或更多的数组,并返回结果。
arr1.concat(arr2,11);    
//选取数组的一部分,并返回一个新数组。
arr1.slice(startIndex,endIndex); 
//从数组中删除元素,返回被删除的元素。  
arr1.splice(startIndex,number);  
//替换index<arr1.length,返回被替换元素;插入index>=arr1.length新元素在index之前,返回[]。
arr1.splice(index,number,newValue); 
//反转数组项顺序
arr1.reverse();
//排序,默认从小到大
arr1.sort(function(before,after){
    return before-after; //>0交换,<0不交换
});
//遍历,数组每个元素都执行一次回调函数。
arr1.forEach(function(value,index,arr){});
//映射,通过指定函数处理数组的每个元素,并返回处理后的数组。
arr1.map(function(value,index,arr){});
//过滤,检测数值元素,并返回符合条件所有元素的数组。
arr1.filter(function(value,index,arr){});
//判断数组中每一项都是否满足条件,只有所有项都满足条件,才会返回true。
arr1.every(function(value,index,arr){});
//判断数组中是否存在满足条件的项,只要有一项满足条件,就会返回true。
arr1.some(function(value,index,arr){});
//在数组中查找符合条件的元素,找到就返回并且终止循环,找不到就是ubdefined.
arr1.find(function(value,index,arr){});

函数: 

/* 函数 this指向函数执行时的当前对象*/
f();    //函数提升
//函数声明
function f(){}
//函数表达式
var fc = function(a,b){
    //隐式参数arguments=[a,b]
    sum1 = arguments[0]+arguments[1];
    //显示参数
    sum2 = a+b;
};
//调用
fc(1,2);
//立即执行函数
(function(){})();

/* 箭头函数 绑定外层this的值 */
const sum = (a,b) => a+b; //(参数)={return 表达式;}

/* 预定义函数方法call()和apply(),改变this的值 */
var fco = fc.call(fco,1,2);    //传参
var fao = fc.apply(fao,[1,2]);    //传数组

闭包:当一个函数的返回值是另外一个函数,而返回的那个函数如果调用了其父函数内部的其它变量,如果返回的这个函数在外部被执行,就产生了闭包。

/* 
特性:1.函数嵌套函数
      2.函数内部可以引用外部的参数和变量,避免全局变量污染
      3.参数和变量不会被垃圾回收机制回收,常驻内存,易造成内存泄露
*/
//方式一:
var f1 = function(x){
    var y = 1;
    function f2(){
        return x+y;
    }
    f2();
}
f1(1);
//方式二:
var f1 = function(x){
    var y = 1;
    function f2(z){
        return x+y+z;
    }
    return f2;
}
var f = f1(1);
f(1);
//方式三:
var f1 = function(x){
    var y = 1;
    return (function f2(){
        return x+y;
    })();
}
f1(1);

正则:

(1)语法:var reg = /正则表达式/修饰符(匹配模式);

(2)修饰符:

          i        忽略大小写;

          g        全局匹配;

                多行匹配;

(3)方括号:

         [ab]        查找[]内任意字符;

         [0-9]       查找0至9的数字;

         [a-z]        查找a至z的小写字母;

         [A-Z]       查找A至Z的大写字母;

         [A-z]        查找任意字母;

         [^]            除了;

(4)量词:

          a      包含至少1个;

          a       包含0个或多个;

          a       包含0个或1个;

          a{n}      包含n个;

          a{x,}      连续出现至少x次以上;

          a{x,y}    连续出现至少x次,至多y次;

          ^a         开头;

          a        结尾;

          ?=a       其后紧接;

          ?!a        其后没有紧接;

(5)元字符:

                查找单个字符,除了换行和行结束符;

          \w      查找数字、字母和下划线;

          \d       查找数字;

          \s        查找空白字符;

          \b        匹配单词边界;

          \0        查找NULL字符;

          \n        查找换行符;

          \f         查找换页符;

          \r         查找回车符;

          \t         查找制表符;

(6)对象方法:

          reg.test(str);        返回true或false

          reg.exec(str);       返回值或null

(7)支持正则表达式的String对象的方法:

          str.split(reg);                  拆分字符串,返回数组

          str.search(reg);              返回第一次出现的位置,无则返回-1

          str.replace(reg,newstr);  替换新内容         

          str.match(reg);                提取符合条件的,返回数组

Error对象: 

(1)属性:错误名name、错误信息message

(2)六个name值:

        eval()函数中 EvalError

        超出数字范围 RangeError

        非法引用 ReferenceError

        语法错误 SyntaxError

        类型错误 TypeError

         encodeURI()中 URIError

(3)异常:

        try{检测throw抛出}catch(err){处理}finally{都执行}

Map():键值对

//创建
var m = new Map();
//属性
m.size;//元素数量
/* 方法 */
//设置键值
m.set(key,value);
//获取键的值
m.get(key);
//返回键的数组
m.keys();
//返回值的数组
m.values();
//返回键值对的数组
m.entries();
//删除指定元素
m.delete(key);
//删除所有元素
m.clear();
//判断是否存在
m.has(key);

Set():唯一值的集合 

//创建
var s = new Set();
//属性:元素个数
s.size;
/* 方法 */
//添加新元素
s.add(v);
//删除指定元素
s.delete(v);
//删除所有元素
s.clear();
//是否存在
s.has(v);
//以数组返回
s.entries();
s.keys();
s.values();

日期: 获取、设置与比较

var d = new Date();    //当前时间
var dd = new Date("12/05/2022 11:10:30");    // 日期格式:月/日/年 时:分:秒
/* 方法 */
// 年份 
d.getFullYear();
// 几月 0-11
d.getMonth();
// 几号 1-31
d.getDate(); 
// 周几 0-6
d.getDay();
// 时间戳  从1970年到当前日期的毫秒数,统一单位
d.getTime();
// 代码执行时间戳       
Date.now();

Math: 

/* 常用方法 */
//绝对值
Math.abs(x);
//四舍五入
Math.round(x);
//上舍入
Math.ceil(x);
//下舍入
Math.floor(x);
//x的y次幂
Math.pow(x,y);
//平方根
Math.sqrt(x);
//随机数
Math.random();
//最大值
Math.max(x,y...,z);
//最小值
Math.min(x,y...,z);

类: 对象的模板,没有hoisting

//基类(父类)
class Animal{
    //构造函数:初始化对象属性
    constructor(name){this.name = name;}
    //getter获取值
    get a_name(){return this.name;}
    //setter设置值
    set a_name(aname){this.name = aname;}
    //静态方法:不能在对象上调用
    static method(){}
}
//实例化对象
let obj = new Animal(value);

/* 继承 */
//派生类(子类)
class Dog extends Animal{
    constructor(name,sex){
        //引用父类的构造方法
        super(name);
        this.sex = sex;
    }
}

3. 数据类型转换

(1)强制转换为String:String(s) s.toString()  隐式转换:+""   

          所有其他类型都可以转换为对应的字符串

 (2)强制转换为Number:Number(n)n.parseInt()n.parseFloat()  解析只取数值

          隐式转换:-0*1/1+

          字符串==>非纯数字(NaN)、空串或空格(0)    null==>0    undefined==>NaN

(3)强制转换为Boolean:Boolean(bool)    隐式转换:!!

         数值==>0和NaN(false)     字符串==>空串(false)    null和undefined==>false 

4. 三种变量的区别

*** 变量提升:先使用后声明 ***

(1) const  只读常量,必须初始化,值不能被修改,不能重置,不会变量提升。

注意:对象和数组的值可以通过属性和下标或方法修改,但不能重新赋值。

/* 对象 */
const obj = { name:"object", age:19 };
// 通过属性修改(两种寻址方式)
obj["name"] = "obj";
obj.age = 20;

/* 数组 */
const arr = [7, 11];
// 通过下标修改
arr[1] = 1;
// 通过数组方法修改
arr.push(2); //末尾添加一个或多个元素,返回新的数组长度
arr.pop(); //删除并返回末尾元素
arr.shift(); //删除并返回开头元素
arr.unshift(9); //开头添加一个或多个元素,返回新的数组长度

(2) let 块级{}作用域,不能重置,不会变量提升,声明的全局变量不属于window对象。

 (3) var  全局(window对象)或函数局部作用域,可重置,可变量提升(初始化后不会)。 

5.  七种运算符

(1)算术运算符:+、-、*、/、%、++、--

         + 任何值与字符串相加先转换为字符串,再进行拼串操作。

         -、*、/ 先将字符串转为数值,再进行运算。

(2)赋值运算符: =、+=、-=、*=、/=、%=

(3)比较运算符 :==(自动类型转换)、===(全等)、!=、!==

         >、<、>=、<=  两个字符串比较Unicode编码,一位一位地比较。

  注: "1"==true==1        null==0(false)        undefined==null

          NaN不和任何值相等(包括它本身),可通过isNaN()函数进行判断

(4)条件运算符: 条件表达式?语句1(true):语句2(false)

(5)逻辑运算符:&&(与)、||(或)、!(非)

         && 第一个值为true则返回第二个值,第一个为false则直接返回第一个值。

           ||  第一个值为true则直接返回第一个,第一个值为false则返回第二个值。

(6)运算符: &(AND)、|(OR)、-(取反)、^(异或)、<<(左移)、>>(右移)

(7)类型运算符:typeof(v) 返回变量类型、a instanceof b 判断a是否为b的实例

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值