你的位置:首页 > Java教程

[Java教程]Javascript基础恶补

 

1、字符集:
Javascript采用Unicode字符集,支持地球上所有在用的语言。2、区分大小写:
Javascript区分大小写,HTML不区分大小写。3、空格、换行、格式控制符:
Javascript忽略空格、换行,可以采用整齐、一致的缩进来形成统一的编码风格。4、Unicode转义序列:
使用6个ASCII字符来代表任意16位Unicode内码。这些Unicode转义序列均以\u为前缀,后跟4个十六进制数。5、注释:
//单行注释的一种方式
/*单行注释的另一种方式*//*
多行注释
多行注释
*/
6、直接量
程序中直接能使用的值
1,2.1,"hello",true,null等7、标识符
用来对变量或函数进行命名
以字母、_,$开头8、保留字
也就是关键字,程序中不能使用Javascript中的默认关键字
比如break, delete, function, return, etc9、可选的分号
如果语句独占一行,其后的分号可以省略。■ 类型、值和变量10、数据类型
能够表示并被操作的类型称作数据类型。11、变量
用来标识值得符号名称,可以通过变量获得值得引用。12、数据类型
原始类型primitive type和对象类型object type。
数字、布尔值、数字是原始类型。
null和undefined是两个特殊的原始类型。
对象是属性的键值对集合。
数组array是特殊的对象,定义了专用的语法。
函数也是特殊的对象,函数可看作相关联的可执行代码。13、构造函数
使用new新建对象,称为构造函数。
构造函数定义的对象可以看作是一个类。
构造函数用来初始化对象。14、系统默认类
Date代表日期的类。
RegExp表示正则表达式的类。
Error表示处理错误的类。15、内存管理机制
解释器有自己的垃圾回收机制。
当不再有任何引用指向一个对象,自动回收占用的内存资源。16、可变类型和不可变类型
不可变类型值不可以修改,可变类型值可以修改。
对象和数组属于可变类型。
数字、布尔值、null和undefined属于不可变类型。
字符串虽然可以看作是字符数组,但它是一个不可变类型。17、数据类型转换
可以自由地进行数据类型转换。
在期望使用字符串的地方使用数字,会将数字自动转换成字符串。18、变量是无类型的
变量可以被赋予任何类型的值
同样一个变量可以重新赋予不同类型的值
全局变量和函数内变量19、整型直接量
● 十进制整型直接量
● 十六进制整型直接量,即以16为基数,以"0x"或"0X"开头,a-f或A-F表示10-15,比如0xff,就相当于15*16 + 15 = 255
● 有些支持八进制,以0开头,推荐不使用20、浮点型直接量
● 包含整数部分、小数点、小数部分
● 还可以用指数计数法表示浮点,即在实数后跟字母e或E,3.02e23,表示3.02*10的23次方21、算术运算符
● +, -, *, /,%
● Math对象
Math.pow(2,5) 2的5次幂
Math.round(.6) 四舍五入
Math.ceil(.6)向上求整
Math.floor(.6)向下求整
Math.abs(-2)绝对值
Math.max(x, y, z)
Math.min(x, y)
Math.random()0和1之间的随机数
Math.PI
Math.E 自然对数的底数e
Math.sqrt(3)平方根
Math.pow(3, 1/3)立方根
Math.sin(0), Math.cos, Math.atan
Math.log(10) 10的自然对数
...22、算术溢出
溢出分为overflow, underflow,被零整除
溢出不会报错
Infinity表示正的无穷大
-Infinity表示负的无穷大
underflow是无限接近于零,分为0和-0
0处于零,报NaN,用来表示非数字值23、判断非数字值
x!=x,当x且仅当x为NaN的时候,才为true
isNaN()函数也是相似的道理
isFine(),当参数不为NaN,Infinity,-Infinity的时候返回true24、日期和时间
new Date(2010,0,1)
new Date(2010,0,1,17,10,30)
new Date()
getFullYear()
getMonth()
getDate()
getHours()
getUTCHours()25、字符串
16位值组成,不可变,有序,序列
字符串用来表示文本
有长度length,索引从0开始
Javascript并没有表示单个字符的"字符型"
单引号中可以包含双引号
双引号中可以包含单引号
+字符串连接
length属性
charAt(0)
charAt()
subString(1,4)2到4号位值上的字符
slice(1,4)2到4号位值上的字符
slice(-2)最后2个字符
indexOf("1")
lastIndexOf("1")
split(",")
replace("","")
toUpperCase()26、转义
\n表示另起一行
\反斜线转义27、RegExp()函数
两条斜线之间的文本构成了正则表达式
/^HTML/以HTK开始的字符串28、布尔值
if(o),当o为undefined, null, 0, -0, NaN为时为false29、null和undefined
用来描述空值,是关键字
对null执行typeof返回object
当作为参数传入函数,推荐使用null。
undefined是变量的一种取值,表明变量没有被初始化。
查询对象属性或数组元素返回undefined,表示属性或元素不存在。
函数没有返回值,返回undefined。
引用没有提供函数形参对应实参时会得到undefined。30、全局对象
● 全局属性:undefined, Infinity, NaN
● 全局函数:isNaN, parseInt, eval
● 全局对象:Date, Regexp, String, Object, Array31、不可变原始值
undefined, null, 布尔值, 数字和字字符串,是原始值,不可更改。
原始值的比较是值的比较。32、可变的对象引用
对象是可变的,对象的值是可以修改。
对象的比较不是值得比的比较33、返回true的情形
null==undefined
"0"==0
0==false
"0"==false34、一个值可以转换成另外一个值并不意味着两个值相等
if(undefined)返回false,并不说明undefined和false相等35、显式类型转换
使用Boolean(), Number(), String(), Object()等函数。
Number("3")
String(false)
Boolean([])
Object(3)
null和undefined不能转化为对象36、隐式类型转换
+ 作为字符串连接,把其中一个非字符串转换为字符串。
!将操作数转化为布尔值并取反37、switch语句
switch(n){
    case 1:
        //语句
        break;
    case 2:
        //语句
        break;
    default:
        //语句
        break;
}38、while
var count = 0;
while(count < 5){
    console.log(count);
    count++;
}39、do/while
funnction printArray(a){
    var len = a.length, i = 0;
    if(len == 0){
        console.log("empty");
    } else {
        do {
            console.log(a[i]);
        } while (++i < len);
    }
}40、for
for(var count = 0; count < 10; count++)
var i,j;
for(i=0, j=10; i < 10; i++, j--)41、for/in
for(var pi in o)42、break退出循环for(var i = 0; i < a.length; i++){
    if(a[i]==target)
        break;
}43、break 标签, 退出非就近的循环
var matrix = getData(); //得到一个二维数组
var sum = 0, success = false;
compute_sum: if(matrix){
    for(var x = 0; x < matrix.length; x++){
        var row = matrix[x];
        if(!row) break compute_sum;
        
        for(var y = 0; y < row.length; y++){
            var cell = row[y];
            if(isNan(cell)) break compute_sum;
            sum += cell;
        }
    }
    
    success = true;
}44、continue
for(var i = 0; i  < data.length; i++){
    if(!data[i]) continue;
}continue也可跟标签45、throwfunction factorial(x){
    if(x < 0){
        throw new Error("");
    }
}46、try/catch/finallytry{
    
}
catch(ex){
    alert(ex);
}46、withwith(document.forms[0]){
    name.value = "";
}把document.forms[0]临时挂在作用域上。47、debugger 临时调试function f(o){
    if(o === undefined) debugger;
}48、对象
属性的无序集合。
每个属性都是一个键值对。
属性名是字符串,从这点上可以把对象看成字符串到值得映射。
对象都有一个原型对象属性,实现"原型式继承",动态添加属性和方法。
对象的属性名不能重复。49、对象直接量创建对象var empty = {};
var book = {
    "main title": "" //属性名有空格必须用引号
}保留字作为属性名,必须用引号。
最后一个属性的属性值后的逗号可以省略。50、通过new创建对象var o = new Object();
var a = new Array();
var d = new Date();
var r = new RegExp("js");51、Object.create()创建对象var o1 = Object.create({x:1,y:2});//创建普通的空对象
var o = Object.create(Object.prototype);//等同于
{}和new Object()52、通过原型继承创建一个新对象function(p){
    if(p == null)
        throw TypeError();
    if(Object.create)
        return Object.create(p);
        var t = typeof p;
        if(t !== "object" && t !=="function")
            thrwo TypeError();
            
        function f(){}
        f.prototype = p;
        return new f();
}53、对象属性的查询和设置给null或undefined设置属性值会报类型错误
有一些属性是只读的,也不能设置。
var a = book.author;
var t = book["main title"];
book.edition=6;
book["main title"] ="";
查询对象并不存在的属性不抛异常抛undefined:book.x; // undefined
对象不存在抛异常:book.x.length//加判断防止抛异常或undefined
var len = undeinfed;
if(book){
    if(book.x){
        len = book.x.length;
    }
}//一种更简洁的写法
var len = book && book.x && book.x.length;54、删除对象属性delete book.author;
delete book["main title"];
delete只能删除自有属性,不能删除继承属性。
删除成功或没有任何副作用返回true。55、检测对象属性
var o = {x:1};
"x" in o
o.hasOwnProperty("x")56、遍历对象属性var o = {x:1, y:2};
for(p in o){
    console.log(p);
}还可以对对象属性过滤。for(p in o){
    if(!o.hasOwnProperty(p)) //跳过继承的属性
        continue;
}for(p in o){
    if(typeof o[p] === "function"){
        continue;
    }
}57、对象属性getter和settervar o = {
    data_prop:value,
    get accessor_prop(){},
    set accessor_prop(value){}
}58、对象属性的特性用来表述属性的属性。
Object.getOwnPropertyDescriptor({x:1},"x");
Object.getOwnPropertyDescriptor(random, "someprop");59、对象的原型属性
在实例对象创建之前就设置好的。
Object.prototype
查看对象的原型Object.getPrototypeOf(把对象作为实参)
检测p是否是o的原型:p.isPrototypeOf(o)60、对象的类属性
字符串,表示对象的类型信息
toString()方法查询它61、对象的可扩展性
表示是否可以给对象添加新属性
Object.isExtensible()62、序列化对象
将对象与字符串之间进行转换。
把对象转换为字符串用:JSON.stringfy()
把字符串转换为对象用:JSON.parse()63、对象的方法
所有的对象从Object.prototype继承属性。
toString()
toLocalString()
valueOf()64、数组
数组是值的有序集合。
每个值叫数组元素。
每个元素在数组中的位置就是索引。65、创建数组
var a = [];
数组元素可以是直接量、表达式、对象
var a = new Array();66、数组元素读写
var a = ["world"];
var value = a[0];
a[1] = 3;67、稀疏数组
数组的长度大于元素个数。
a = new Array(5);68、数组元素的添加和删除
a = [];
a[0]="";
a[1]="";
a.push("");
delete a[1]索引为1的位置不能再有元素69、数组遍历
for(var i =0; i < keys.length; i++)
for(var i = 0, len = keys.length; i < len; i++)
for(var index in sparsArray)
data.forEach()70、多维数组
var talbe = new Array(10);
for(var i = 0; i < table.length; i++){
    tables[i] = new Array(10);
    for(var row = 0; row < table.legnth; row++){
        for(col=0; col < tables[row].lenght; col++){
            table[row][col] = row*col;
        }
    }
}71、数组方法
a.join("")
a.reverse()
s.sort()
a.concat()
Array.slice()获取数组片段
Array.splice向数组插入或删除元素
push()和pop()
shift()和unshift()72、ECMAScript5中的数组方法
forEach(),map(), filter(), every(), some(), reduce(), reduceRight(),indexOf(), lastIndexOf()73、判断数组类型
Array.isArray([]), Array.isArray({})74、函数
函数是一段代码。
函数的形参像局部变量一样工作。
函数调用会为形参提供实参的值。
每次调用会有一个上下文。
函数挂在对象上,就是对象方法。
调用对象方法,上下文就是该对象。
初始化一个新创建对象的函数交构造函数。
函数就是对象,可以把函数赋值给变量,把函数作为参数,也可把函数作为属性值。
函数可以被包含在函数内,外层的函数就是作用域,内层的函数可以使用作用域内的变量,这就是闭包。75、函数作为值
函数可以赋值给变量,赋值给对象的属性,赋值给数组元素。//赋值给变量
function square(x){
    return x*x;
}
var s = square;//赋值给属性
var o = {
    square: function(x){
        return x * x;
    }
}
o.squre(6);//赋值给数组元素
var a = [function(x){return x*x;},20];
a[0](a[1]);76、自定义函数属性
函数是特俗的对象,可以拥有属性。
fn.counter = 0;
function fn(){
    return fn.counter++;
}77、call()和apply()方法
以对象o的方法来调用函数f。
f.call(o)
f.apply(o)f.call(o, 1, 2);
f.apply(o, [1, 2])78、Function()构造函数
var f = new Function("x", "y", "return x*y;");79、类
基于原型的继承机制。
类是动态可继承。
类的所有实例对象都从同一个原型对象上继承属性。80、类和构造函数
构造函数用来初始化新创建的对象。
new调用构造函数。
调用构造函数就是把prototype属性用作新对象的原型。
function Range(from, to){
    this.from = from;
    this.to = to;
}Range.prtotype = {
    includes: function(x){
        return this.from <=x && x <= this.to;
    },
    foreach: function(f){
        for(var x = Math.ceil(this.from); x <= this.to; x++)
            f(x);
    }
};81、类原型的constructor属性
var F = function(){};
var p = F.prototype;
var c = p.constructor;
c===F82、类的继承class Animal{
    constructor(voice){
        this.voice = voice || '';
    }
    
    speak(){
        display(this.voice);
    }
}class Cat extends Animal{
    constructor(name, color){
        super('Meow')
        this.name = name
        this.color = color
    }
}var fulffy = new Cat('fluffy', 'White');
fluffy.speak();