JavaScript和java基本没有关系。Java语言更为严谨,主要是类为单位的,需要先经过javac解码编译,变成class文件,在运行java才可以运行文件,是强类型语言,格式与html无关。JavaScript只要有浏览器,就能使用,主要使用的是函数,是脚本语言,不需要编译,是弱类型语言,嵌入在html中。
Jscript和JavaScript合并就成了ECMAscript,现在用的是ES5,还是基于对象的脚本语言,ES6就和Java有很多相似之处,是面向对象的脚本语言
使用JavaScript
1.加前缀javascript:。。。。,如
<a href="javascript:alert('1223')">jhdjs</a>
意思是运行这个JavaScript而不是跳转链接,需要点击这个链接才能弹窗(很少用)
2.script标签包含,如
是直接执行,可以在script标签上加src引外部js,如果引了外部js,该标签在html里包含的代码不再执行,直接执行外部的js代码
script标签的属性:
src:外部js的链接
defer:延迟加载,在html加载完再用,但是支持外部的,只能用在有src的,所以外部样式就可以加在body之上了,但是内部的不可以在其上面(除非用文档就绪函数)
$(document).ready(function(){
//代码
})
就是文档就绪函数,符合一般函数的格式:$(selector).action(){},ready就是action,等待文档就绪,简写为$(function(){}),(用$要把jQuery引进来)
noscript标签:用来向不支持JavaScript的浏览器提示信息
不支持JavaScript就会执行noscript这段
定义变量:隐式:直接给变量赋值,eg:a=“1231231” ;显式:用var定义,eg:var a;/var a,b,c; let:可以定义块变量。
var a="wqeqqw"是显式定义变量并赋值,var a;相当于var a=undefined;
自动类型转换
+左右都是数字是算数,如果有一个是字符串,就会变成字符串拼接,数字那方变成字符串
JavaScript不区分小数和整数,var a=true都行
强转类型,如下图,d=5,因为转化为了整数,非数字可能被转化为NaN。如字符串不是数字开头,是NaN;是数字开头,从非数字开始裁掉
<script type="text/javascript"></script>
在老版本html中,script的type属性里,text表明放在之间的是文本类型,JavaScript告诉浏览器里面的text是个JavaScript脚本,而h5以后,省略也不会出错,因为默认脚本语言就是js
变量作用域
和Java不一样,只在JavaScript中适用
函数中隐式定义的是全局变量
关于重名时什么时候是全局,什么时候是局部,如下
实例1:
此时male已经没有了
实例2:
结果:
不报错的原因是,实质上var scope被提到了函数的第一行,而赋值还在原来的位置,如下(变量提升机制)
与上等价,如果没有可提升的,如下代码,则输出10
就算这句话永远不执行,也会变量提升
typeof是看类型的运算符,如
JavaScript中块范围的应用👇
而用let定义的变量只能在块范围内使用
在script里面定义的全局变量在html的 事件处理 中也能使用,但是在html中不能用
在JavaScript中,就算不给函数传参,也会执行函数,不给参数为undefined,所以没有函数重载,只有函数覆盖
用var定义的变量会自动添加全局window对象的属性,如var a;就可以说window.a,但是let定义的不会,如let b; window.b就会undefined,也不会有函数中的变量提升
如果是var,见上
const常量
必须在定义时初始化,不可再修改常量的值
数字类型:整数、小数统称为Number,但是十进制的不要以0开头,因为八进制以0开头,十六进制用0x,如果想写014可以写成字符串
a是5乘10的二次方,b就相当于var b=20
正无穷大为Infinity负无穷大为-Infinity,两者之间进行算数运算会变成NaN,他们和其他数字进行运算还是Infinity或-Infinity
两个正无穷大总是相等的
其实这么大就可以表示无穷了
a是Infinity,b是Number类里的NaN,0/0是NaN,NaN不与任何值相等,isNaN(a)函数可以判断一个变量是不是NaN
有一个类可以快速得到特殊数值
1byte类型整数能存放的范围:-128-127,一共256个(因为有0),第一个数表示符号,不变
unicode 2的16次方种可能,基本上表示世界上所有的字;最短的是ASCII码,是八位的
有限的数无法表示无限的数,所以要做出裁剪
输出false,所以建议使用差值比较法。
用他们差值的绝对值和一个极小的数比较,小于极小的数就可以认为是相等的。
字符串
用单引号或双引号引起来
JavaScript中的字符串可以用单引号引起来,但是Java中不行,比较字符串是否相等,在JavaScript中用==就行,而Java中需要用equals()方法
JavaScript如 a==b
字符串中第一个字符可以用索引 a[0],或a.charAt(0),也是以位置索引
var a=String("sfasf")//构造一个字符串
获取字符串中一个字符的Unicode值,用charCodeAt,如a.charCodeAt(1),a是字符串
toUpperCase()将字符串转化为大写,调用方法同上,且都是动态方法,都需要一个对象来调用
String.fromcharCode()是静态方法,不需要对象,直接写字符串就行,将Unicode值转化为字符串,如String.fromcharCode(123),输出是{,因为Unicode值是123对应的是{
indexOf()搜索,找到对象中第一次出现括号里字符串的地方,如
输出3
lastIndexOf是找到最后一次出现的位置,方法同上
substring是字符串裁剪,如a.substring(2,6),以a字符串中索引值为2的字符开始,到6的结束,要头不要尾,如果第二个不写,就是到了最后一个,不可以有负数
slice和substring差不多,但可以接受负数,负数就是从右边开始索引
就是s到d
就是g
match()和search()也是搜索,和indexOf差不多,但是,支持正则表达式作子串,而且match返回的是所有匹配的字符串的数组,search返回的是匹配的索引值,indexOf只有第一个
俩斜杠就是正则,俩斜杠之间的就是要找的东西,可以不写那么具体,如可以写\d,找所有数字。match的斜杠后要加g(代表全局匹配)
concat()在后面加其他字符串
输出是text+text2+text4
split是拆字符串,
是以7来拆字符串,拆成数组
replace替换
把所有7换成qcby,可见也支持正则