[心得] JavaScript权威指南学习笔记

本文介绍了JavaScript的基础知识,包括变量、数据类型、对象与数组的操作,以及函数的定义与使用等,并提供了丰富的示例代码。

JS作为5大语言之一,在前端领域应用广泛。

当学习一门新的编程语言时,应当对照书中示例,边学边做,反复演练以加深理解。

JS中两种最重要的数据类型是对象和数组。

对象是名值对的集合,或者字符串到值的映射的集合。

数组是以数字为索引的列表。

当函数和对象合写在一起时,函数就变成了方法。

自定义方法,this关键字是对定义方法的对象的引用。
按惯例,构造函数均首字母大写。
jQuery代码非常易于识别,因为它多次利用一个$()的函数。

以下是一些基本的JS示例

var x;
x = 0;
x

x = 1;
x = 0.01;
x = "Hello World;"

x = 'JavaScript';
x = true
x = false;
x = null;
x = undefined;

var book = {
    topic: "JavaScript";
    fat: true
};

book.topic;
bock["fat"];
book.author = "Flanagan";
book.contents = {};

var primes = [2, 3, 5, 7];
primes[0];
primes.length;

primes[primes.length - 1];
primes[4] = 9;

var points = {
    {x:0, y:0},
    {x:1, y:1}
};

function plus1(x){
    return x+1;
}

points.dist = function(){
    var p1 = this[0];
    var p2 = this[1];
    var a = p2.x - p1.x;
    var b = p2.y - p1.y;
    return Math.sqrt(a*a + b*b);
};

function abs(x) {
    if (x>=0){
        return x;
    }
    else {
        return -x;
    }
}

function factorial(n) {
    var product = 1;
    while(n>1){
        product *= n;
        n--;
    }
    return product;
}

function factorial2(n){
    var i, product = 1;
    for(i=2; i<=n; i++){
        product *= i;
    }
    return product;
}


function debug(msg) {
    var log = $("#debuglog");
    if (log.length == 0) {
        log = $("<div id='debuglog'><h1>Debug Log</h1></div>");
        log.appendTo(document.body);
    }
    log.append($("<pre/>").text(msg));
}
Math.pow(2,3)
Math.round(.6)
Math.ceil(.6)
Math.floor(.6)
Math.abs(-5)
Math.max(x,y,z)
Math.min(x,y,z)
Math.random()
Math.PI
Math.E
Math.sqrt(3)
Math.log(10)

var then = new Date(2016,11,14);
var later = new Date(2016,11,14,20,55,11);
var now = new Date();
var elapsed = noew - then;
later.getFullYear()
later.getMonth()
later.getDate()
later.getDay()
later.getHours()
later.getUTCHours()

var s = "Hello, JavaScript";
s.charAt(0)
s.charAt(s.length-1)
s.substring(1,4)
s.slice(1,4)
s.slice(-3)
s.indexOf('J')
s.lastIndexOf('J')
s.split(',')
s.replace('h', 'H')
s.toUpperCase()

var text = "testing: 1, 2, 3";
var pattern = /\d+/g
pattern.test(text)
text.search(pattern)
text.match(pattern)
text.replace(pattern, '#')
text.split(/\D+/);

JS语言标准ECMAScript,简称ES
JS区分大小写,HTML不区分大小写,JS在多数情况下忽略程序的空格和换行符。

直接量就是程序中的直接数据值。

数字不能首字符出现在变量名中。

只有在缺少了分号就无法正确解析代码的情况下,JS才会自动补分号。

涉及return,break和continue,以及++,–运算符时不能断行。

JS的数据类型分为原始类型和对象类型。原始类型包括数字,字符串和布尔值。

JS变量是无类型的,JS不区分整数值和浮点数。

考虑兼容性,最好不要使用以哦为前缀的整型直接量。

Js中算术运算在上溢和下溢或被0整除是不会报错,而是返回正或负的Infinity。0除0,结果不是一个数NaN。

Js中非数字值和它自身都不等。

RegExp是正则表达处理模块。

对null执行typeof运算。结果返回object,可认为null是一个特殊对象值,含义是非对象。

用来定义的值表示更深层次的空值。undefined是预定义的全局变量。它的值是未定义。
给变量或属性赋值,给函数传参,最佳选择是null。

全局对象应该当作保留字来看待。
全局属性:undefined,Infinity,NaN
全局函数:isNaN(),ParseInt(),eval()
构造函数:Date(),RegExp(),String(),Object(),Array()
全局对象:Math,JSON

var s = “text”;
s.len =4;
var t = s.len;
t的值为undefined,因为临时字符串随即被销毁。

undefined,null,布尔值,数字和字符串是原始值,原始值不可更改,原始值的比较是值的比较,对象的比较是引用比较。当引用同一对象时,才相等。

所有对象继承了两个转换方法:toString()和valueOf()

===也称严等,用来检测两个操作数是否严格相等,==允许类型转换。

eval()是一个函数,但它已被当成运算符来对待。

eval()只有一个参数,如果传入非字符串,它直接返回该参数,否则把字符串当JS代码解析。
关于eval()最重要的是,它调用它的变量作用域环境。

delete是一元操作符,用来删除对象属性或数组元素。

void用来忽略操作数的值。常用在客户端的URL中。

throw expression;抛出异常,用try/catch/finally进行捕获异常。

with语句用于临时扩展作用域,不推荐使用。

debugger用来产生一个断点。

use strict;严格模式
主要3点:
1. 禁止with
2. 变量先声明
3. 调用函数中的一个this值是undefined,而非严格模式中,this总是一个全局对象。

empty相当于python的pass

原型继承是JS的核心特征。

对象最常用的用法是创建,设置,查找,删除,检测和枚举它的属性。
对象直接量是由若干名值对组成的映射表。
new运算符是由若干名值对组成的映射表。

没有原型的对象不多,Object.prototyp就是其一,它不继承任何属性。
通过原型继承来创建对象。

var o3 = object.create(object.prototype);

extend()函数把一个对象的属性复制到另一个对象中,只简单复制属性名和值,没有复制属性的特性,也没有复制存取器的getter和setter方法。

对象3属性:原型,类,和可扩展性。

toLocaleString()返回一个表示这个对象的本地化字符串。

Js并不真正支持多维数组。


Array.join()
Array.reverse()
Array.sort()
Array.concat(4,5)
Array.slice()
Array.splice() //插入或删除元素的通用方法
Array.push()
Array.pop()
Array.unshift()//当多个参数时,整体一次性插入
Array.shift()

forEach()方法从头到尾遍历数组,没有for循环的break,必须借助异常.

map()将调用的数组的每个元素传递给指定的函数,并返回一个数组,它包含该函数的返回值.

filter()方法进行过滤

every()类似所有
some()类似存在

reduce()和reduceRight()使用指定的函数将数组元素进行组合,生成单个值.
indexOf()
lastIndexOf()

JS函数可以嵌套在其他函数中定义,并访问它们宿主函数作用域中的任何变量.

任何函数只要作为方法调用,实际上都会传入一个隐式实参this.

当方法的返回值是一个对象,则可以调用它的方法.这种方式称为链式调用.

可变实参列表用arguments参数,它并非真正数组,而是一个实参对象.

callee指代当前正在执行的函数,caller指代调用者.

JS中函数并非原始值.而是一种特殊对象.

函数对象可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内,这种特性称为闭包.

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值