JS学习笔记2

该博客围绕JavaScript展开,涵盖日期操作、数学函数、特殊比较运算符、循环与条件判断、类型转换、正则表达式、错误处理等内容。还介绍了this关键字、箭头函数、类的使用,以及对象操作、Set集合、Map映射、函数调用等知识,为JavaScript学习提供了全面的笔记总结。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

日期

  • new Date()
  • new Date(year,month,day,hour,minute,second,millisecond)
  • new Date(millisecond)
  • new Dtae(datestr)
    第二个构造函数后面的可以选填,但是必须有年和月,不能只有一个参数,否则就被识别为第三个构造函数
    第二个构造参数中的年如果为两位数或者一位数,则认为是19xx开头的

toUTCString():转化成0时区标准的时间字符串
toDateString():转化成更加易读的形式

<script>
            var date1=new Date();
            var date2=new Date(2023,1,1,23,54,22,0);
            var date3=new Date(99,1);
            var date4=new Date(100000);
            document.write(date1+"<br>");
            document.write(date2+"<br>");
            document.write(date3+"<br>");
            document.write(date4+"<br>");
            document.write(date1.toDateString()+"<br>");
            document.write(date1.toUTCString()+"<br>");
        </script>

在这里插入图片描述

第四种的参数为日期字符串,需要满足一定格式
在这里插入图片描述
ISO:yyyy-MM-ddThh:mm:ss
注意中间有个T,分隔日期和时间

获取部分日期参数

在这里插入图片描述
注意:获取的month和day是从0开始的

设置日期参数

在这里插入图片描述

JS数学函数

在这里插入图片描述
总体和java差不多,都是由Math类的静态调用

JS的特殊比较运算符

===!==
三个等号表示,当两个var类型和内容相等时才会返回true,否则为false,可以看作是对两个等号的更精确的说明
比如:

<script>
            var str=new String("hello");
            var str2="hello";
            document.write(str===str2+"<br>");
            
        </script>

返回false,因为一个的类型是string,一个的类型是object
!==则与前面那个相反

JS的循环,条件判断

JS的条件判断和循环其实和Java是一致的
但是JS多了for-in和for-of循环
**for-in:**可以看作是foreach的变体
如下:for(var x in array){} 顺序遍历数组中的元素
for-of:和上面差不多,但是作用的对象是可以迭代的变量(数组,字符串)
如下:for(var x of iterable){} 如果是字符串,则会一个一个地遍历字符

类型转换

构造函数获取:变量.constructor
类型转换,直接调用想转化的类型的构造函数,把想转化的变量作为参数即可
比如:String(11)

转化成String还可以通过变量的toString()方法
把日期转化成Number会转化成这个日期的毫秒数

可以通过单目运算符 + 把字符串转化为数字
比如:document.write(typeof +"1");
结果为number

正则表达式

通过两个正斜杠包含起来的字段,后面跟着修饰符
比如:/hello/i
search方法和replace方法都涉及使用正则表达式搜索内容
修饰符
在这里插入图片描述
正则表达式书写
[0-9]:0-9之间的任何数字
[abc]:abc中的一位
元字符:
在这里插入图片描述
正则表达式是一个对象,有一些匹配字符串的方法

  • test(str):搜索字符串内是否有匹配正则表达式的子串,如果有返回true
  • exec(str):同上,搜索,但是如果搜索到返回搜索到的匹配子串
<script>
            var str="I love JavaScript";
            var re=/love/;
            document.write(re.test(str)+"<br>");
            document.write(re.exec(str)+"<br>");
        </script>

在这里插入图片描述

错误处理

也和java类似,如下:

try{
                
            }catch(err){

            }finally{

            }

由于js是动态类型,所以catch的参数只有名字,没有类型error
也可以选择自己手抛错误,比如:throw “错误”
JS会尽可能地转化类型,所以可以把String类型转化成error类型

错误的类型
在这里插入图片描述

this关键字:

当在标签的属性中使用时,this指代的是标签对象
比如:<button type="button" onclick="this.style.display='none'"></button>
一般this指代的是包含这个的对象

箭头函数

类似Java的lamada,但是箭头是等于号组成的

(参数)=>{语句}

实际上就是函数的简化形式
当只有一个参数时,括号可以省略

var1=>{}

当只有一条语句时,代码块的括号也可以删除

func=()=>document.write("hello");

如果语句中只有一个值的话,那这个值就是返回值

func=()=>"hello";
            a=func();
            document.write(a);

声明方式和Java差不多,但是构造函数不一样

class example{
                constructor(){

                }
                method1(){

                }
                method2(){
                    
                }
            }
            var e=new example();

内部的方法也不需要function的前缀,只需要名字即可
创建对象直接用new即可

导入导出

从外部文件中导入一部分就是导入
比如:

<script type="import">
            import message from "/aa.js";
        </script>

message是文件内默认导出的名称
导出分为默认导出和命名导出,为文件展现给外部提供给外部导入
命名导出:
可以直接在变量前声明导出:export const a=1;
也可以在末尾声明导出的变量:export{变量名字...}; 可以导出多个
默认导出:

default export 变量名;

其他

  • 设置断点
debugger;
  • 延迟加载
    最好把js代码放在页面渲染的后面,因为在执行js阶段,渲染不会进行,所以最好先渲染再执行JS代码
    或者可以通过把script标签的defer属性设置为true来延迟加载
  • 避免过多使用DOM(比如document.getElementById())

对象

对象属性的操作:
对象属性的访问

obejct.property
obejct["property"]

对象内部包含属性,可以先创建对象(new Object())再在外部创建属性

  <script>
            var v=new Object();
            v.property="11";
            document.write(v.property);
        </script>

删除属性:

delete ob.property	 

会同时删除对象的属性和值
通过for-in访问对象属性:

<script>
            var v=new Object();
            v.property="11";
            v.a="12";
            v.b="13";
            for(var x in v){
            document.write(v[x]);
            }
        </script>

for-in中var x储存的是属性的名称,所以需要v[x]访问属性值

对象转化成数组

var array=Object.values(对象);

JSON.stringify(对象)

可以把对象转化成字符串
比如:

<script>
            var v=new Object();
            v.property="11";
            v.a="12";
            v.b="13";
            
            document.write(JSON.stringify(v));
        </script>

输出是对象的json格式
{“property”:“11”,“a”:“12”,“b”:“13”}

可以转化Date对象之类的,看看内部的结构

转化数组也是转化成json格式的数组

JS对象的Getter和Setter方法

其实用普通的函数是可以解决getter和setter的方法,但是可能js提供的方法会更加清晰
getter:
get 函数名(){return xxx;}
setter
set 函数名(x){}

<script>
            var v ={
                x:1,
                set setX(x1){
                    this.x=x1;
                },
                get getX(){
                    return x;
                }
            }
        </script>

getter和setter方法可以像属性一样使用
比如:v.setX=1; document.write(v.getX);
不必加上括号当作正常的方法

外部对象的构造器

可以通过一个构造器,也就是模板,创建多个对象
有点像类,但是比类简洁
需要在外部声明:
function 对象原型名(构造参数){

}
通过new 对象原型名(构造参数即可创建)
比如:

function P(h){
                    this.x=h;
                }
                var p=new P(1);

可以创建多个对象,但是不能在外部创建属性,在构造方法内未声明的变量均可视为内部属性
但是可以通过prototype添加属性

<script>
            function P(h){
                    this.x=h;
                }
                var p=new P(1);
                P.prototype.func=function(){
                    document.write(1);
                }
                P.prototype.name="对象";
                document.write(p.name);
                document.write(p.func);
                document.write(JSON.stringify(p));
        </script>

在这里插入图片描述
但是外部定义的属性和函数并不能在对象中真正显示,只能通过引用得出

Set集合

在这里插入图片描述

<script>
            var set=new Set(["1","2","3"]);
            set.add("4");
            set.has("4");
            set.forEach((v)=>document.write(v+"<br>"));
            document.write(set.size+"<br>");
            set.delete("1");
            for(var v of set.values()){
                document.write(v+",");
            }
        </script>

初始化时,构造器的参数应该是一个数组的原始表达,或者干脆就是空

可以通过 object instanceof Set 验证对象是否为Set集合
values()和key()返回的都是值的迭代器,可以通过for-of迭代
entries()返回的是[key,value]

Map映射

在这里插入图片描述
创建:

var map=new Map([["a",1],["b",2],["c",3]]);

参数是键值对的原型,外部一个[] ,内部一个[]作为节点,每个节点用逗号隔开

set:

map.set("a",2);
map.set("d",4);

可以作为添加,也可以作为修改,如果键存在就是修改,键不存在就是添加

get(键)/has(键):

map.has("d")

通过键得到是否存在

forEach():
参数内的函数一定要是两个参数的(key,value)

map.forEach((key,value)=>document.write(key+":"+value+"<br>"));

函数:

函数可以作为一个变量:
var func=function(){document.write(“函数”)};
调用时可以把变量的名字当作函数的名字,后面的函数表达式是匿名的

函数实际上是个对象:
可以通过new创建:

var func2=new Function("a","b","return a*b");

前面的是参数,后面的是函数内的语句

调用和上面同理,但是最好不要这么定义函数
可以在函数内通过arguments.length 知道函数被调用时收到的参数个数(注意:JS不会检查实际输入的参数是否和形参数量相等,如果参数少于形参,则没有的形参会被赋值成undefined)
arguments也可以看作是参数的数组,可以通过下标访问
arguments[0];

函数可以自调用:

(匿名函数定义)();
(function(){document.write("hello")})();

函数的调用

每个函数都有一个对象包含,就算是外部函数也是由window对象包含,所以外部函数的this指代的是window对象,外部函数也可以由window对象调用

函数的调用也可以通过new调用
比如:

<script>
            function func(a){
                this.a=a;
            }
            var v=new func(1);
            document.write(v.a);
        </script>
   

这时候函数会被看作是构造函数,这会创建一个对象

call()和apply()

<script>
            var ob1={
                func:function(){
                    document.write(this.a*this.b);
                }
            };
            var ob2={
                a:1,
                b:2
            }
            ob1.func.call(ob2);
            ob1.func.apply(ob2);
        </script>

由于JS的对象没有单纯的继承,所以要想实现对象内函数的复用,可以借助于call和apply
这两个方法都是用于把一个对象中的函数借给另一个对象使用

对象1.函数名.call(对象2,需要传入的参数);	
对象1.函数名.apply(对象2,需要传入的参数(以数组的原型形式));	

前提是函数内用到的对象1的属性对象2必须拥有,也就是二者具有相似性,而且函数内的调用需要带上this

bind()也是类似,但是不带后面的传入的参数

类中的全局变量并不会显示地声明,而是在构造器中隐式声明:

class exam{
                constructor(age){
                    this.age=age;
                }
            }

有个似乎没有声明的age变量,这就是类的全局属性,通过构造函数定义

类的继承和Java差不多,但是由于没有访问修饰符,所以功能方面差了一些,但是同样是继承属性方法,可以使用super

静态函数:
仅仅只能在类中使用,是独属于类的

class exam{
                constructor(age){
                    this.age=age;
                }
                static getAge(){
                    return this.age;
                }
            }
            document.write(exam.getAge());
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值