1.ECMA 欧洲计算机制造商协会
2.";"的作用
- 代码后的;当压缩代码时可以用于压缩代码,有效的间隔开代码。
3.数据类型有 undefined,null,boolean,string,number,object
4.typeof操作符
- 检测给定变量的类型,那检测函数会返回什么
5.boolean
- 可以对任何数据类型的值调用Boolean()函数
- ECMAScript中所有类型的值都有与这两个
boolean
值相对应的值 -
string
: 任何非空字符串(true) ----- " "(false) -
number
: 任何非零数字值(true) ----- 0和NaN(false) -
object
:任何对象 (true)---- null (false) -
undefined:
不适用 ---- undefined(flase)
6.null 和undefined的区别,
-
null
: 空对象指针(car=null typeof car 为object) -
undefined:
没有被定义的变量 - 无论什么情况都没有必要把一个变量的值显示为undefined,但是只要意在保存对象的变量还没有真正保存为对象,就有必要让该变量保存null值
- 但是
if(null == undefined)
//true (undefined派生自null)
7.number :
- 8进制数以0开头, 16进制数都要使用0x开头
- 浮点数值(必须包含一个小数点,并且小数点后面必须有一位数字) 由于浮点数值占用的内存空间是整数值的两倍,所以当数值为类似于1.0的时候,ECMA会自动将浮点数值转化为整数值
- e的用法
var a=3.12e5
//312000 - 为什么
0.1+0.2 != 0.3
-
NaN
:1.任何设计NaN的操作都会返回NaN 2.NaN于任何值都不相等,包括他自己 -
isNaN()
函数,作用即名字意思,放入参数后他会先尝试转化为数值,如 “10” 或者boolean值 。他还适用于对象,会自己调用对象的value()函数判断返回值,和调用tostring()方法 - 三个把数值转化非数值转化成数值的函数 ,Number(),parseInt(),parseFloat(),可以转化字符型数字和boolean值
8.string:
字符字面量
- \n(换行) \t(制表) \b(退格 \r(回车)\f(进纸) \(斜杠) '(单引号) "(双引号) '' hei '' (表示字符'hei')
- \xnn(以十六进制的代码nn表示的一个字符,n为0-f ,\x41表示A
- \unnn(以十六进制代码nnn表示的一个unicode字符 \u03a3表示一个希腊字符)
- 这个字面量都被作为一个字符在解析
- var text="this \u030a3" texi.length为5个字符
字符串的特点
- 字符串一旦创建,他的值就不能更改
var lang="java" lang=lang+"scrpit"
- 实现过程:先创建容纳10个字符的新字符串,然后填充
"java","script"
,然后销毁这两个字符串
转化为字符串
-
tostring()
方法,每个字符串都有自己的tostring方法,但是null和undefined没有这个方法,当数值调用tostring方法的时候可以,可以加入参数,如,tostring(16),先转化为16进制的数值字符串 -
string()
方法,如果值有tostring()方法,调用tostring()。当不知道要转换的值是不是null和undefined的时候,可以用string方法,null转化为"null" ,undefined转化为"undefined" - 所以string(1)的时候,其实是在调用tostring()。
9.object类型
var obj = object();
- EMCAScript中的对象其实就是一组数据和功能的集合
- object类型是所有他的实例的基础,object类型所具有的任何属性和方法也同样存在于更具体的对象中
- object每个实例都具有下列的属性和方法
-
constructor
:保存着用于创建当前对象的函数。对于上面的例子,构造函数(curstructor)就是object()。
+hasOwnProperty(PropertyName)
:用于检测给定的属性在当前对象实例中(而不是原型中)是否存在,其中,作为参数的属性名(PropertyName)必须以字符串的形式指定(obj.hasOwnProperty("name")). -
isPrototypeOf(object)
:用于检测传入的对象是否是当前对象的原型 -
propertyIsEnumberable(PropertyName)
:用于给定的属性是否能够使用for-in语句来枚举,与hasOwnProperty()方法一样,作为参数的属性名必须以字符串形式指定 -
toLocaleString()
:返回对象的字符串表示,该字符串与执行环境的地区对应。 -
toString()
:返回对象的字符串表示 -
valueof()
:返回对象的字符串,数值,或者布尔值。通常与toString()
方法的返回值相同
-
10.操作符
一元操作符(只能操作一个值): ++ --
位操作符
- 位操作符用于在最基本的层次上
- ECMAscript中所有的数值都以IEEE-754 64位格式存储,但是位操作符并不直接操作64位的值。
而是,先将64位的值转化为32位,然后进行操作,在讲32位的值转化位64位,由于64位的存储格式是透明的,因此整个过程就像只存在32位的整数一样
- 数值18:00000000000000000000000000010010
- 负数同样用以二进制补码来存储,但是使用的格式是二进制补码
- 数值-18:
- 先求得18的二进制码
- 然后求18二进制码的反码(将0转换成1,1转换成0)
还有一些关于位操作符的知识就不在这里概述了
布尔操作符
在一门编程语言中,布尔操作符的重要性堪比相等操作符,如果没有测试两个值关系的能力,那么诸如if。。。else和循环之类的语句就不会有用武之地。
- 布尔操作符一共有三个:非(not),与(and),或(or)
- 逻辑非操作符(!)
- 逻辑与操作符(&&)
- 逻辑操作符(||)
乘性操作符
- 表示两个数的乘积
- 如果成绩超过了ECMAScript数值的表示范围,则返回Infinity(存放正无穷大的数值)或者-Infinity(存放负无穷大的数值)
- 如果操作的不是一个数值,则会在后台先调用Number()看能不能将其转换为数值。
除,加,减操作符规则类似
关系操作符( <, >,<=,>=四种)
- 这几个操作符都返回布尔值
- 当比较字符串的时候,会比较字符串的第一个字符的编码值的大小
-
(var a="23" < "3")
//true 因为"2"的字符编码小于"3" -
(var b= "Bas"< "apache" )
//true 因为大写字母的字符编码全部小于小写的字符编码 -
(var c= "3" <2)
//false 字符比较中有数字的时候,字符会被先转换成数字
相等操作符
- 相等(== )和不相等(!=)
- 相等和不相等这两个操作符都会强制转型,然后比较他们的相等性
- 如果一个操作符是对象,另一个不是,则调用对象的valueOf()方法,然后比较
- 如果是两个对象,则比较他们是不是指向同一个对象。
- 全等和不全等
条件操作符(三元运算符)
赋值操作符
- 复合操作符:(*=,/=,+=,-=,<<=,>>=)
11.语句
if语句
-
do-while语句
- 后测试循环语句,循环体内的代码至少循环一次
- do { i++ } while (i<10)
-
while语句
- while(){}
for语句
-
for-in语句
- 精准的迭代语句,通常用来枚举对象的属性
for(var name in window) {document.write(name)}
- 遇到null和undeined会报错,但是在es5中被修正,对这种情况不再执行循环体
-
label语句
- 使用label语句可以在代码中添加标签,以便将来使用
- label通常配合其他循环语句一起使用
var num=0;
outermost:
for(var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i == 5 && j == 5){
break outermost;
}
num++; //55
}
}
-
with语句
- 将代码的作用域设置到一个特定的对象中(一般不使用)
-
swich语句
switch(参数){
case value : 执行体 ;
break;
case value :执行体;
break;
default :执行体;
}- 虽然js中switch语句借鉴了其他语言,但是这个语句在js中也有他自己的特色,他能够使用任何数据类型,而且case的值不一定是常数,还可以是表达式
switch("hello"){
case "he"+"llo":alert(yes);
break;
case "hh"+"llo":alert(no);
break;
}-
var num =25;
switch(true){
case num <0 : alert("小于0");
break;
case num >=0 && num<=10 :alert("在0和10之间");
break;
}这里之所以给switch语句传递表达式true,是因为每个case值都可以返回一个布尔值,这样,每个case都会按照顺序被执行,知道遇到default为止
12.函数
- 严格模式对函数的限制:
- 1.不能把函数和参数命名为eval和argument
- 2.不能出现两个命名参数同名的情况
- 理解参数
- 与其他语言不同,js并不介意传递进多少个参数,因为js内部是用一个数组来表示的,函数接收到的始终是一个数组,而不关系数组里的参数
- arguments对象:
- arguments和数组很像,但是并不是Array的实例
- arguments可以使用放括号语法访问它的每一个元素
- arguments的值永远与对应命名参数的值保持同步
- js中没有重载,但是,他却能同过arguments对象和其他的方法来实现重载的功能