js的标准:ECMAScript
不同的浏览器厂队js实现方式不同
谷歌推出v8引擎,对js实现最快,nodejs也用v8引擎
javascript 包括 es,bom,dom
js语言特点:1:解释性语言,写完直接执行,不用编译 2:面向对象
js编写位置: 在a标签内写href:"javascript;"可以阻止跳转
一旦引入了外部文件,内部的代码会忽略掉,js从上到下执行
字面量是一些不可改变的值,都是可以直接使用的,但是一般不会直接使用
变量可以保存字面量,可以任意改变。变量更加方便我们使用,
声明变量:用var。变量赋值后边的值会覆盖前边的值
标识符:可以自主命名。(变量名,函数名,属性名)
标识符规则:字母,数字,下划线,$组成。(不能以数字开头,不能是es中的关键字,或保留字)
命名规范:采用驼峰命名法。保存的变量采用unicode编码,就是utf-8.
数据类型:字面量的类型
6种:String Nunber Boolean Null Undefined Object
前5种属于基本数据类型,object属于引用数据类型
String:需要引用引号包起来。单双都可以,但是不要混用,需要嵌套时,使用\作为转义字符,当使用一些特殊符号时,用
\n表示换行,\t表示制表符,\\表示\
代码顺序执行,从上到下依次执行。
Number 整数,浮点数。
可以使用typeof检查变量的数据类型。typeof a
Number.MAX_VALUE表示最大值
Number.MIN_VALUE表示最小正值
console.log(Number.MAX_VALUE)//1.7976931348623157e+308
console.log(Number.MIN_VALUE)//5e-324
Infinity表示正无穷大,是一个字面量 typeof Infinity//number
typeof NaN//number
如果进行浮点运算,可能得到一个不精确的结果。转换一个二进制,可能存在不精确的问题,所以千万不要使用js进行精确度高的运算。
Boolean true或者false
Null类型的值只有null,专门用来表示一个为空的对象。
typeof null//object,
Undefined类型的值只有一个undefined ,表示一个声明但是没有赋值的变量。
var b;
typeof b//undefined;
强制类型转换:
指将一个数据类型强制转换为其他数据类型。主要把一些数据类型转换为string,number ,boolean.
转为string:
方法一:调用被转换数据类型的tostring方法 a.toString() 该方法不会影响原变量,会将转换的结果返回。
该方法具有局限性:null和undefined没有toString方法。
console.log(null.toString);
TypeError: Cannot read property ‘toString’ of null
方法二:调用String函数
String(a),返回转换结果。a=string(a)
这个方法可以把null,undefined也进行类型转换。适应性更好。
转为number数据类型
方法一:调用Number函数
字符串:
字符串转为数字,纯数字转为对应的数字
字符串包含非数字,则转换为nan
空字符串转为数字->0
null//0
undefined//NaN
方法二:
专门用来对付字符串parseInt().parseFloat()
parseInt可以将一个字符串中有效的整数内容取出来,遇到字符或者小数点停止解析,如果不能解析则返回NaN
parseFloat可以获得小数。如果对非string,先转换为string,在转换为number.
二进制以0b开头,不过有的浏览器不支持。八进制用0开头
例如070不同的浏览器输出结果不同,parseInt(a,10)传递第二个参数,来指定数字的进制。
将其他数据类型转换 为boolean
使用Boolean()函数
数字转boolean,除了0和nan,其余的都是true
字符串转boolean,除了空串,其余都是true。里边只有空格,也为true
null和undefined都会转换为false
对象也会转换为true.
算术运算符:
对一个或多个值进行运算
typeof就是一个运算符,获得值得数据类型。并以字符串的形式返回运算结果。
+:当对非number类型的数据,会先转换为number在进行计算,任何值和NaN运算,结果都为NaN.
"+"用于对字符串的拼接,并返回。
任何值和字符串做加法运算,都会先转换为字符串,再进行拼串。
任意数据类型+""可以转换为字符串形式,隐式类型转换
减法运算符:
除了字符串加法,其余都会转换为number进行运算
**法运算:转换为number进行运算
任何值做-,*,/ 运算都会自动转换为number类型,可以利用这个特点,可以-0,*1,/1做隐式转换。
% 取模运算 也叫 取余数运算
9%3 // 0
一元运算符:只需要一个操作数。typeof就是一元运算符
+:正号,对于非Number类型的值使用+,可以转换为Number类型
-:负号,对于非Number类型的值,先转换为Number类型,再进行取反。
自增和自减运算符:
++:对于一个变量自增,原变量的值会立即自增1,直接改变原变量的值。
无论是后加,还是前加,原变量的值会立即自增1.不同的是:a++和++a的值不同。表达式的值不同
var a=1;a++//1自增前的值
var a=1;++a//2 自增后的值
逻辑运算符:
!非
有返回值,对于非布尔值,先转换为布尔值,在进行取反。可以利用该特点,对非布尔值类型的数据取两次反,转化为布尔数据类型。原理和Boolean()相同。
&& 与
对符号两侧的值进行与运算,返回运算结果。
运算规则:只要有一个false,就返回false。
js中的与属于短路与,第一个为false,则不会检查第二个
|| 或
只要有一个true就返回true,两个值都为false返回false
js的或属于短路的或,如果第一个为true,则不会检查第二个。
非布尔值的逻辑运算:
&&
对于非布尔值的,先转换为布尔值,然后在运算,并且返回原值。
如果两个值都为true,返回后边的值 1&&2 //2
如果有false,返回靠前的false.
总结一下:如果第一个为true,必然返回第二个值
如果第一个为false,必然返回第一个值
||
如果第一个值为true,直接返回返回第一个值
如果第一个值为false,必然返回第二个值
关系运算符
关系成立返回true,关系不成立返回false
对于非数值型的数据类型,会将其转换为数字类型,再进行比较。
特殊情况:如果两边都是字符串,不会转化为数字进行比较。比较的是UNICODE编码。比较的时候一位一位进行比较,如果相同比较下一位。借用它可以对英文排序。
任何值和NaN进行任何比较,都是false。
比较字符串中的数字时,需要转型,才能得到正确的结果。
编码:
在字符串使用转义字符输入unicode编码,使用\u四位十六进制编码
在网页中使用编码,使用“&#四位十进制编码;”
==运算符:
自动类型转换:如果两个值的类型不同,会转换为相同类型,再进行比较。
大部分情况下转换为数字比较。
nullundefined//true
undefined衍生自null,
NaN不和任何值相等,
0null //false
isNaN()可以判断一个变量是不是NaN
===全等运算符
和相等类似,但是不进行类型转换。类型不相同,直接返回false
null===unedfined//false
!==不全等运算符
不会做自动的类型转换。
三元运算符:
语法:条件表达式?语句1:语句2
执行时首先对条件表达式进行求值,true执行语句1 ,并返回执行结果。false执行语句2,并返回执行结果
条件表达式非布尔值,转换为布尔值,在进行运算
运算符的优先级:
先乘除,后加减。
&&的优先级高于||
自增>单目>双目
不清楚的,可以加括号。提升优先级