javascript权威指南——笔记(第三章)

字符集:Unicode字符集

JS:区分大小写

标识符:指变量、函数、属性名、函数名、函数参数
第一个字符:字母、下划线、$
其后的字符:字母、下划线、$、数字
默认:驼峰命名

转义字符:   \n 换行  \t制表  \b空格  \r回车  \f换页符  \\  \'  \"
注释:单行//
多行 /**/
直接量: number、string、boolean、null、/RegExp/img
语句:以分号';'结尾(规范)

关键字、保留字:
do,while,for,in,continue,break,
if,else,switch,case,default,with,
try,catch,throw,
true,false,null,
var,new,
delete,
function,return,this
typeof,instanceof,
void,debugger,finally
//ECMAScript5新增关键字:
class,const,enum,export,extends,import,super
//严格模式下:
arguments,eval
implements,let,private,public,yield,interface,package,protected,static

变量:   var name = value;
      重复声明(是合法且无害的,重复声明带有初始化器,就跟一条简单的赋值语句没有区别)
      遗漏声明(严格模式没有声明变量,会报错。) 

变量作用域:

函数作用域,声明提前:

作为属性的变量:当声明一个js全局变量时,实际就是定义一个全局对象的一个属性(应该是window下的一个属性)。当使用var声明一个变量时,创建的这个属性是不可配置的,也就是说这个变量不能通过delete运算符删除。(严格模式下) 

作用域链    

数据类型: undefined null boolean number string
object
判断类型:判断类型
undefined: 1未定义
2定义了未赋值
3函数无return

null:空对象指针(如果将来要用于保存对象,初始值为null)
  
   注:使用.或者[]来存取undefined,null属性或方法都会报错

boolean: true false
         假:0 "" false null undefined NaN

number:正无穷:Infinity
负无穷:-Infinity
Number.MIN_VALUE~~Number.MAX_VALUE(-2的53次方~2的53次方)

NaN isNaN()

Number() parseInt() parseFloat()->string转number

十进制,十六进制(0x开头,0~9a~f),严格模式不支持八进制(0开头)

6.02e3 -> 6.02*10m³

Math对象,一些数学方法

注意小数的比较
var x = .3-.2; 0.09999999999999998
var y = .2-.1; 0.1
=> x != y;

日期对象:Date()

string:''或者""
str 在ECMAScript5中,字符串可以多行显示,末尾用\
1 var str = "You need to be strong yet polite, \
2            passionate yet objective, and nice to children, \
3            the elderly";
        str.length
toString() (null、undefined没有这个方法
     String()

     + 字符串连接
        兼容用 str.charAt(num) 高级版本 str[num]

object:
    全局对象:全局对象的初始属性并不是保留字,但应把他们当初保留字对待
    包装对象:String();Number();Boolean();
null,undefined没有包装对象,访问他们的属性,方法会报错

var s = "test"; //创建字符串
s.len = 4;      //给他设置属性    临时创建字符串对象,并给其len属性赋值为4
var t = s.len;  //访问这个属性 -> undefined 通过原始的(没有被修改过的)字符串值创建一个新字符串对象,尝试读取len属性,这个属性自然不存在

//这段代码说明在读取str,num,bool的属性或者方法的时候,表现的像对象一样,但如果师徒给其属性赋值,则会忽略这个操作:修改只是放生在临时对象身上,这个临时对象并未继续保留下来

1 var s = "text";
2 var S = new String("text");
3 
4 alert(s == S);  //true
5 alert(s === S); //false 类型不同
    不可变的原始值和可变的对象引用:
    原始值:undefined,null,boolean,number,string

    对象(引用类型):他的比较不是值得比较,即使两个对象包含相同的属性及相同的值,也是不等;
对象值都是引用,对象的比较都是引用的比较,当且仅当他们引用一个对象时,他们才想等

1 var a = [];
2 var b = a;
3 b[0] = 1;
4 a[0];
5 
6 a === b;//true
    如果想得到一个对象或者数组的副本,则必须显示复制对象的每个属性或数组的每个元素
1 var a = ["a","b","c"];
2 var b = [];
3 
4 for(var i = 0,len = a.length; i<len; i++){
5 
6     b[i] = a[i];
7 
8 }

    如果想比较两个单独的对象或者数组,则必须比较他们的属性或者元素。
    定义一个比较两个数组的函数:
function compareArr(a,b){

    if(a.length != b.length)return false;

    for(var i = 0,len = a.length; i < len; i++){

        if(a[i] != b[i]) return false;

    }

    return true;
}

   类型转换:

 

   原始值 转 对象:原始值通过调用String(),Number(),Boolean();
  
   显示类型转换:就是调用Boolean(),Number(),String(),Object()
          除了null,undefined之外任何值都有toString()方法

          number->string
          方法:num.toString(),num.toFixed(),n.toExponential(),n.toPrecision()
          string->number
          方法:Number(),parseInt(),parseFloat()
  
  对象 转 原始值:(不懂
          object->boolean  all true
          object->string(number)通过一个方法来完成
                所有的对象都继承了两个转换方法:toString()->返回一个反应这个对象的字符串
                                valueOf()->



          
 






 

 

 
posted @ 2015-07-25 10:25  恢1106  阅读(241)  评论(0编辑  收藏  举报