JavaScript学习笔记(1)
1.JavaScript
js代码要写到script标签中
alte("xxx");弹出xxx内容的警告框
doucument.write('''xxx');在页面中输出xxx内容
console.log(""xxx");向控制台输出xxx内容
js也可以写在超链接中(href="JavaScript:alter('xxx');")标签中(如buttton onlick="alter('xxx');)"或者外部文件(通过script标签引入,但引入后该script标签不会再执行其他js代码)
2.Js的数据类型
(1.)js中使用var来声明一个变量
(2.)字面量只js中的一些常量
同时字面量有六个数据类型:string 字符串(一般要用引号) number 数字 boolen逻辑值 null 空值(空对象) undefined(没定义值)
有时某些字符与代码冲突时,可以用转义字符来代替(如\t制表符 \"双引号 \'单引号 \n换行)
使用type(变量)会返回变量的类型值
其他进制的数字
16进制开头用0x,8进制0开头,2进制0b开头;
输出时可以加个逗号10,表示十进制等;
(3.)数据类型的强制转换
指的是转成string number boolen这三个类型
a.转成string
一种是调佣toString()方法,a.toString()会返回a变成字符串后的值,且不会改变原值,且null和undefined这两个不能使用该方法;
另一种调佣String(变量名)函数,返回变为字符串的变量,而且null和undefined也可以使用
b.转成number
第一种使用Number(变量)函数,返回变成数字的变量值,如果原本就是数字,会返回数字,如果原来有字母,会返回NAN(数字类型中的非数字),如果没有内容,会转换成0,null转成0,undefined装成nan;
第二种专门用于字符串,parseInt()parseFloat()两个函数;可以将一个字符串中有效的整数或者浮点数部分,如果不是字符换会先转成字符串然后再计算;
c.转成boolen
调用Boolen()函数返回布尔值,数字转布尔,除了0和nan其他都是true;字符串转布尔,除了空格都是true;null和undefined都会转成false,对象也会转成true;
(4.)运算符
a.算数运算符(二元运算符)
+号:当两个非num相加时,会转成num再相加,任何和nan相加得nan;两个字符串相加会合并;任何值和字符串相加,会先装成字符串然后再相加(可以利用这个和空串相加实现类型转换);
-号:任何数做减法时会先转成数字然后运算(字符串也是转成数字)
*号和/号和-号相同
b.一元运算符
+号:对数字无影响 -号:对数字取反
如果是非数字,前面加上正或负号会将其变成数字;
可以用来实现数据转换
(5.)自增自减运算符
i++(返回原值),++i(返回增加后的值);
i--(返回原值),--i(返回减少后的值);
但无论是哪一种,一旦出现,就会使原变量增加或减少;
(6.)逻辑运算符
!:取反运算符,使用后会转变为逻辑值,可以使用两个非实现类型转变;
||:或运算符,两个中有一个为真就是真,如果第一个是真的,就不会看第二个;进行运算时将数据变成布尔类型,然后返回在哪里结束的地方的原值
&&:与运算符.两个都是真才是真.如果第一个是假就不会看第二个;进行运算时将数据变成布尔类型,然后返回在哪里结束的地方的原值
(7.)比较运算符
会将数据转变为数字然后进行比较;特殊地,如果两边都是字符串,或一位一位地比较字符编码,如果某一位没有字符视为空;
(8.)相等运算符
===全等,只有数据和数据类型都相同的情况下才为true;
==相等,字符串等会默认转为数字进行比较;
undefined衍生自null.默认两者相等;
nan不与任何值相等,包括它自身,可以用isNan()函数进行判断;
(9.)三元运算符/条件运算符
条件表达式?语句1 语句2
true时执行语句1,false时执行语句2;
3.流程控制语句
(1.)if语句
if(true/false)当为true时执行;
(2.)Switch分支语句
Switch(变量)
case:xx ;变量会与每一次case处的值进行比较,如果满足,会从该case处一直执行代码,所以要在每次case处添加break;
(3.)循环语句
while循环:while(x)如果x为true则会一直执行,为false时退出循环,也可以手动break退出循环
for(初始化表达式;条件表达式;更新表达式){};
4.对象
(对象变量保存的是堆内存中的地址,利用该变量能保存很多基本数据类型的数据,属于引用数据类型)
(1.)对象的分类
a.内建对象
ES标准中定义的对象,在任何es的实现中都可以使用;
比如Math String Number Boolen Function Object等等
b.宿主对象
由运行环境提供的对象,目前主要指的是浏览器提供的对象
比如BOM DOM
console.log() document.write();这两个都是宿主对象
c.自定义对象
自己创建的对象
(2.)对象的创建
使用new关键词,调用的是某某类的构造函数,来创建对象;
给对象添加/修改属性:对象名.属性名=xxx;
给对象删除属性:delete 对象名.属性名;
如果使用特殊的属性名,采用该方法来添加:对象["属性名"]=属性值;
读取时也这样读取对象["属性名"];
也可以向[]中传变量,这时没有双引号;
in运算符: "属性名" in 对象 如果真则返回true;
字面量方法创建对象:var obj={添加具体属性(多个属性之间用,隔开)};
(3.)枚举对象的属性
for(var n in 对象){};
有几个对象就会循环几次,每次执行时把属性的名字赋给变量;
5.函数
函数也是一个对象(也可以作为实参和返回值)
(1.)创建函数对象的方法:
a.var fun=new Fuction(代码字符串)使用new来创建函数对象;
b.使用函数声明来创建对象
fuction 函数名([形参])中括号是可选的意思{代码语句};
c.使用函数表达式来创建函数
var 函数名=fuction([]){};
赋值语句最后要加上分号,普通的声明函数不需要
(2.)调用函数的方法:a.函数对象();
b.当函数作为对象的属性时,该函数便成为了一种方法,直接对象名.属性就可以调用;
(3.)立即执行函数
利用函数声明创建函数时,如果没有设置函数名,而且整体用()括了起来,那么它就成为了匿名函数,在之后加上()就会被调用,成为立即执行函数,且往往只会执行一次;
它有一个额外的属性callee即是当前正在执行的函数对象.
(4.)函数对象的方法
一般是谁调用函数谁就是这个函数的this;
但可以通过函数的call()和apply()方法来更改this,
第一个参数是要设置的this对象,之后的参数就是正常的参数;
但apply要传this之后的数据要封装在数组里;
(5.)浏览器在调用函数的时候会向函数中传递隐含的参数arguements,这是一个类数组的对象,也可以使用数组的属性方法但类型不是数组,它的内容是传递的实参(即便不定义形参也可以);
6.作用域
(1.)全局作用域
有一个全局对象widow,代表的是一个浏览器的窗口,它由浏览器创建,我们可以直接使用
在全局作用域中,创建的变量都会被作为window对象的属性保存;
(2.)函数作用域
数据只会在函数代码块存在,函数执行完后会自动销毁;
在函数中可以访问全局作用域(window.变量),但在全局无法访问函数作用域变量;
如果在函数里操作某个数,会首先在函数作用域找,没有则往上一级找直到全局作用域
如果还是没有就会报错.
在函数作用域中使用var也会在函数作用域中提前声明,函数同理;
如果在函数中声明变量时没有用var,那么这个值是全局变量;
(3.)变量声明提前
使用var关键字声明的变量,会在所有的代码被执行前被声明,如果不写var不会被提前声明;
fuction函数声明会被提前声明;如果用函数表达式或者new的话不会执行,因为变量或者函数本身已经被声明了,但函数变量并没有完成赋值;
7.this
解析器(浏览器)在调用函数时每次都会向函数内部传递进一个隐含的参数,
这个隐含的参数就是this,上下文对象
分几种情况(根据调用方式的不同而不同)
(1.)直接函数本身调用,则this是window;
(2.)以对象的方法(属性)调用时,this是这个对象;
(3.)使用构造函数时,构造函数中的this即是被创建的对象
8.构造函数
一个构造函数就是一个类,通过类创建的对象叫它的实例
对象 instanceof 构造函数 返回它是不是这个类的真值
创建对象时使用new关键词+类名可以创建该类的对象
构造函数的流程:(1.)立即创建一个新的对象
(2.)将新建的对象设置为函数中的this
(3.)逐行执行函数的代码
(4.) 将新建的对象作为返回值返回(即便没有return也会返回)
9.原型对象
(1.)创建的每一个对象,浏览器都会向其中传入一个属性prototype(对象类型,每个函数的原型对象都唯一,成为原型对象)
作为普通函数调用时该原型对象没有作用,当作为构造函数调用时,所创建的对象有一个隐含的属性(__proto__)来指向构造函数的原型对象.
(2.)可以向原型对象中添加属性,作为公用内容;
用in检查某个对象是否有某个属性时会涉及到原型对象,但如果用对象的hasownproperty()方法可以只检查自身;
(3.)想要使用某个对象的函数或者方法时,会先从自身找,如果找不到会从原型调用,还没有会从原型的原型调用,到最后会到object原型,object没有原型;
10.tostring
当打印对象时,返回的其实是对象的string调用的结果
且用hasowmproperty检查该对象没有tostring方法,用原型来找其实是object的方法;
如果想改变返回值,可以直接修改该对象的tostring属性来覆盖原型对象的方法(或者修改原型对象的方法);
总结:对象会默认继承原型对象的属性方法;
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构