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中函数并非原始值.而是一种特殊对象.
函数对象可以通过作用域链相互关联起来,函数体内部的变量都可以保存在函数作用域内,这种特性称为闭包.