JS入门到精通
1.JS简介
java的脚本语言
2.JS输出语言
JS的的代码写到script标签中(在head里面)
alert(" ");
控制浏览器弹出一个警告框
document.write(" ");
让计算机在页面中输出一个内容 ,可以向body中输出内容
console(控制台).log(" ");
向控制台输出一个内容
3.JS编写位置
1.可以将js代码编写到标签的onclick属性中,当点击按钮时,js代码才会执行.
2.可以将js代码写在超链接的href属性中,这样当点击超链接时,会执行js代码.
注:虽然可以写在标签的属性中(像a标签那样),但属于行为与结构耦合,不方便维护,不推荐使用。
3.可以将js代码写在script标签里.
4.可以将js代码编写到外部js文件中,然后通过script标签引入,在src里面。
写到外部文件中可以在不同的页面中同时使用,也可以利用到浏览器的缓存机制。(推荐使用的方式)
注:script标签一旦用于引入外部文件了,标签里面就不能再编写代码了,即使编写了 浏览器也会忽略,如果需要,可以在下面重新创建一个新的script标签用于编写内部代码。
1.<button onclick="alert('哈哈哈哈,想不到吧');">点击</button>
2.<a href="javascript:alert('让你点你就点?')">再点击这个</a>
3.<script type="text/javascript"> alert("script里的代码"); </script>
4.<script type="text/javascript" src="./js"> </script>
<script type="text/javascript">alert("内部的JS代码,重新写的");</script>
4.JS基本语法
严格区分大小写
5.字面量和变量
1.字面量:都是一些不可改变的值(比如:1 2 3 4 alert(1234871);),都可以直接使用,但一般不会直接使用。
变量:可以用来保存自变量,且值可以任意改变 ,更方便使用。
可以通过变量对字面量描述(如age)
2.声明变量
在js中使用var 关键字来声明一个变量。
var a;
a=123;
console.log(a);
3.声明和赋值同时进行
var a=123;
6.标识符
JS中所有可以由我们自主命名的都可以称为是标识符
例如:变量名、函数名、属性名
命名一个标识符时需要遵守如下规则:
1.标识符中可以还有字母、数字、_、$
2.不能以数字开头
3.标识符不能是JS中的关键字或保留字
4.标识符一般都采用驼峰命名法:首字母小写,每个单词的开头字母大写,其余字母小写 xxxYyyZzz。例:helloWorld
JS底层保存标识符实际上是采用Unicode编码(utf-8),所以理论上所有utf-8中含有的内容都可以作为标识符。(可以用中文名,但最好别用)
7.数据类型
数据类型指的就是字面量的类型,在JS中一共有6中数据类型。
Objecct属于引用数据类型,其余的属于基本数据类型。
1.String 字符串
1.在JS中 字符串要用引号引起来,不加引号就是变量
双引号必须得在同一行。
输出字面量 字符串str
alert("str");
输出变量str
alert(str);
var str ="hello";
把hello字符串赋值给str这个变量,所以str就是一个字符串
2.使用双引号或单引号都行,但不要混着用
3.引号不能嵌套,双引号里面不能放双引号,单引号里面不能放单引号。
4.在字符串中,可以使用\作为转义字符,当表示一些特殊符号时 可以用\进行转义
str ="说句话:\"两个双引号一起用,可以这样来个转义 \" ";
\"
表示一个"
\'
表示一个’
\n
:换行
\t
:空一格 制表符(相当于TAB键)
\\
:表示一个\
var只在声明变量的时候写(类似于设x),写第一次的就行。
相同变量名,变量值最下面的有效:
2.Number 数值
在JS中所有的数值都是number类型,包括整数和浮点数(小数)。
可以使用一个运算符 typeof 来检查一个变量的类型
语法:typeof 变量
数字123: var a=123
字符串123: var b ="123"
检查数值时,会返回number
使用typeof检查Infinity也会返回number
检查字符串时,会返回string
a=Number.MAX_VALUE*Number.MAX_VALUE
console.Log(Number.MAX_VALUE);
最大值: console.Log(Number.MAX_VALUE*Number.MAX_VALUE);
也可以直接写 a=Infinity;
最小值; -Number.MAX_VALUE*Number.MAX_VALUE
大于0的最小值:Number.MIN_VALUE
负无穷:-Infinity
NaN是一个特殊的数字,表示Not A Number
使用typeof检查一个NaN也会返回number
3.Boolean 布尔值
4.Null 空值 5.Undefined 未定义
6.Object 对象
8.强制类型转换
1.将其他数据转换为string:
方式一:toString
也可以这样写:
方式二:调用string函数
调用string函数,并将被转换的数据作为参数传递给函数。
2.转换为Number
方式一:使用Number()函数
字符串→数字
1.如果是纯数字的字符串,则直接将其转换为数字
2.如果字符串中有非数字的内容,则转换为NaN
3.如果字符串是一个空串或者是一个全是空格的字符串,则转换为0
布尔值→数字
ture转成1
false转成0
Null→数字0
undefined→数字NaN
<script>
a=""; (空串)
a=Number(a); //调用Number()函数来将a转换为Number类型 -->
console.log(typeof a);
console.log(a);
</script>
方式二:parseInt()和parseFloat()
专门对付字符串
parseInt():把一个字符串转换为一个整数
parseFloat():把一个字符串转换成一个浮点数
注:parseInt()可以将一个字符串中有效的整数内容取出来,然后转换为Number;
parseFloat()作用和parseInt()类似,不同的是它还可以获得有效的小数。
如果对非String使用parseInt或parseFloat,它会先将其转换为String,然后再操作。
3.转换为Boolean
使用Boolean()函数
数字转布尔:除了0和NaN,其余的都是true。
字符串转布尔:除了空串,其余都是true。
null和undefined都会转换为false。
对象也会转换为true。
方式2:隐式类型转换
为任意数据类型做两次非运算,详见13 !
9.其他进制的数字
0x开头:16进制
0开头:8进制
0b开头:2进制(但不是所有浏览器都支持)
10进制:
070这种字符串,有些浏览器会当成8进制解析,有些会当成10进制解析。
10.算数运算符(也叫操作符)
通过运算符,可以对一个或多个值进行运算,并获取运算结果。
比如:typeof就是一个运算符,可以来获得一个值的类型。它会将该值的类型以字符串的形式返回
当对非Number类型的值进行运算时,会将这些值转换为Number然后再运算。
注:任何值和NaN做运算都得NaN.
算数运算符
+
-
如果两个字符串相加,则会拼串。(将两个字符串拼接为一个新字符串并返回。)
-
任何的值和字符串做加法运算,都会先转换为字符串,然后再和字符串做拼串的操作。可以利用这一特点,来将一个任意的数据类型转换为String 只需要为任意的数据类型+“”(空串) 。这是一种隐式的类型转换,由浏览器自动完成,实际上也是调用String函数
c = c +"";
c = String(c);
二者本质一样
还有一种写法:
var c=123;
结果123
任何值做- * /运算时,都会自动转换为Number
可以利用这一特点做隐式的类型转换,可以通过为一个值-0 *1 /1来将其转换为Number
原来和Number函数一样,用起来更简单
% 取模运算(取余数)
11.一元运算符
只需要一个操作数,例:typeof
+ 正号
不会对数字产生任何影响
-负号
对符号进行取反
- 对于非Number类型的值,它会先转换为number然后再运算
可以对一个其他的数据类型使用+,来将其转换为number,原理和number函数一样。
例:
12.自增和自减
自增 ++
使变量在自身的基础上增加1
对于一个变量自增以后,原变量的值会立即自增1
- 分两种:后++(a++)和前++(++a),都会使原变量的值自增1
不同: a++的值等于原变量的值(自增前的值),++a等于原变量新值(自增后的值)
a++; 使a自增1
自减
使变量在自身基础上减1。
- 分两种:后–(a–)和前–(–a)
不同:a–是变量的原值(自减前的值),–a是新值
13.逻辑运算符
!非
对一个布尔值取反(对一个值取两次反,值就不变)
如果对非布尔值运算,会先将其转换为布尔值,然后再取反。可以利用该特点,(为任意一个数据类型取两次反)来将一个其他的数据类型转换为布尔值。
&& 与
对符号两侧的值进行与运算并返回结果
JS中的与属于短路的与
如果第一个值为false,不会检查第二个值。第一个值为true,会检查第二个值。
|| 或
JS中的或属于短路的或
如果第一个值为true,则不会检查第二个值。第一个值为false,会检查第二个值。
14.非布尔值的与或运算
会先将其转换为布尔值,然后再运算,并且返回原值
与运算:
如果两个值都为true,则返回后面的。(类似短路的)
如果两个值中有false,则返回靠前的false
或运算
15.逻辑运算符
减乘除取余同理。
16.关系运算符
比较两个值之间的大小关系。
关系成立返回true,不成立返回false。
- 非数值的情况:将其转换为数字,再进行比较。
任何值和NaN做任何比较都是false
注:如果符号两侧都是字符串时,不会将其转换为数字进行比较,而会分别比较字符串中字符的Unicode编码
比较字符编码时,是一位一位进行比较。
如果两位一样,则比较下一位,所以借用它来对英文排序
比较中文时这个表没有意义
如果比较的两个字符串型的数字 ,可能会得到不可预期的结果。
17.Unicode编码表
&#编码;
这里的编码需要十进制。
18.相等运算符
比较两个值是否相等,相等会返回true,否则返回true
使用== 来做相等运算
当使用==来比较两个值时,如果值的类型不同,则会自动进行类型转换,将其转换为相同的类型,然后再比。
undefined衍生自null,所以这两个值做相等判断时,会返回true
NaN不和任何值相等,包括它本身。
可以通过**isNaN()**函数来判断一个值是否是NaN,如果该值是则返回true
不相等**!=**则 返回true
19.条件运算符(三元运算符)
语法:
条件表达式? 语句1: 语句2;
获取a和b中的最大值
获取abc中的最大值
这种写法不推荐,不方便阅读