JavaScript学习笔记

概况

JavaScript区分大小写

ECMAScript5 保留5个关键字

Class const enum export extends import super

严格还有argument eval

语句结束可选分号

 

JavaScript数据类型分两类:

原始类型primitive type

数字、字符串、布尔值、null和undefined

对象类型

object、全局object、函数

JavaScript解释器有自己的内存管理机制,自动垃圾回收,是一种面向对象的语言

JavaScript变量是无类型的,用var来声明。变量采用词法作用域,在函数外的是全局变量,函数内的局部变量

JavaScript不区分整数和浮点值,均为64位浮点,最大+-1.79e308,最小+-5e-324,负号是一元求反运算符,不是数字直接量语法测的组成部分。整数支持十六进制表示如0xfa。严格模式不支持8进制。

 

算数运算

Math.pow(2,53)

2的53次幂

Math.round(.6)

0.6四舍五入

Math.ceil(.6)

向上求整

Math.floor(.6)

向下求整

Math.random()

生成一个在[0, 1)区间的伪随机数

被0除返回无穷大Infinity,无意义的运算返回NaN如0/0或Infinity/Infinity。Number.MAX_VALUE+1是Infinity。

NaN与任何值都不相等,包括自身。所以无法用x==NaN来判断x是不是NaN,而应该用x!=x来判断或用isNaN()

isFinite()在参数不是NaN,Infinity和-Infinity的时候返回true。负零等于正零,但作为除数时除外。

 

JavaScript浮点数有足够的精度,但不能精确表述

 

日期时间

var now = new Date(2013, 0, 1) //2013年1月1日

var later = new Data(2013, 0, 1, 17, 10,30) //用一天,当地时间17:10:30pm

var elapse = later - now;

later.getFullYear()

later.getMonth()

......

 

字符串

JavaScript使用UTF-16,大部分字符都是16位的。Html中字符串单引号双引号处理建议:

<button οnclick="alert('Thank\'s buddy!')">ClickMe</button>

var s = "hello, world"

s.charAt(0)    //"h"

s.charAt(s.length-1)   //"d"

s[s.length-1]    //"d" ECMAScipt5支持这种表示

s.substring(1,4)   //"ell"

s.slice(1,4)   //"ell"

s.slice(-3)   //"rld"

s.indexOf("1")   //2

s.lastIndexOf("1")   //10

s.indexOf("1", 3)    //3 在位置3及以后首次出现字符1的位置

s.split(", ")   //["hello", "world"]

s.replace("h", "H")

s.toUpperCase()

记住,这些方法都返回编辑后的字符串,原字符串不变

 

正则表达式的模式匹配

var text = "testing 1,2,3"

var pattern = /\d+/g  //g代表所有,类似还有i表示忽略大小写

text.search(pattern)   //返回首次匹配成功的位置

text.match(pattern)    //返回所有匹配组成的数组

text.replace(pattern, "#") ;//替换所有匹配

text.split(/\D+/)    //用非数字字符截取字符串

 

null和undefined

除null或undefined之外的任何值都具有toString()方法,结果通常和String()返回结果一致

 

显式类型转换

Number("3")    //3

String(false)   //"false"

Boolean([])    //true

Object(3)    //new Number(3)

数字转换

var n = 123456.789

n.toFixed(0);   //"123457"

n.toFixed(2); //"123456.79"

n.toFixed(5); //"123456.78900"

n.toPrecision(7); //"123456.8"

 

parseInt("3 blind mice")   //3

parseFloat("3.14 miteers")    //3.14

parseInt()可以接收第二个可选参数,指定数字转换基数,2~36

 

=、==和===运算符

 

几个JavaScript特点的运算符:

delete

删除属性

var o = {x:1, y:2};

delete o.x;

typeof

检测操作数类型

(typeof value == "string") ? "'" + value + "'" : value

typeof null返回object    typeof一个函数返回function

>>>

无符号右移(>>是有符号右移)

和===

恒等,==会在比较时自动类型转换,而===不会

!==

恒非等

void

 

in

 

var point = {x:1, y:1};

x in point;    //返回true

instanceof

var d = new Date();

d instance of Date;  

//为计算这个表达式,JavaScript先计算Date.prototype,然后在d的原型链中查找有没有Date.prototype。

 

原型链

对象中存在一个隐藏的成员,这个成员指向其父的原型,如果父类的原型是另外一个类的实例的话,则这个原型对象中也存在另一个隐藏成员指向另一个原型

 

eval()函数

eval()只有一个参数,若参数为字符串,则会将字符串当成JavaScript代码进行编译,若编译成功,则开始执行这段代码,并返回代码中最后一个表达式语句的值。

eval使用了调用它的变量作用域来处理字符串中变量的作用域

 

语句

JavaScript支持for(varp in o)循环表示,每次循环将属性名字赋给变量p

debugger语句

use strict语句

 

对象

Object.create()静态方法

一个现在看不大懂但以后会经常用到的函数

function inherit(p) {

if (p == null) throw TypeError();

if  (Object.create)

return Object.create(p);

var t = typeof p;

if (t !== "object" && t !== "function")throw TypeError();

function f() {};

f.prototype = p;

return new f();

}

属性赋值要么失败,要么创建一个属性,要么在原始对象中设置属性

一种简练的,可以避免因属性不存在而报错的方法:

var len = book && book.subtitile &&book.subtitle.length;

hasOwnProperty()检测属性是否存在于某个对象中

var o = {x: 1};

o.hasOwnProperty("x");   //返回true

perpertyIsEnumerable()是hasOwnProperty()的增强版,只有检测到自由属性且这个属性可枚举才返回true

除了用in之外,另一种更简单的方法判断一个属性是否是undefined

var o = {x: 1};

o.x !== undefined;   //返回false

"x" in o    //返回true

属性 getter和setter的定义:不用冒号,例:

var o = {

data_prop: value,

get accessor_prop() {},

set accessor_prop(value) {}

}

描述数据属性的属性有value, writable, enumerable和configurable,用Object.getOwnPropertyDescriptor()能得到属性的特性

 

对象的三个属性,原型prototype、类class和可扩展性extensible attribute

原型属性

是用来继承属性的,非常重要,经常将o的原型属性直接叫做o的原型

用isPrototypeOf()来检测一个对象是否是另一个对象的原型

类属性

可以用toString()然后slice(8, -1)来获得类属性

可扩展性

表示是否可以给对象添加新属性

 

序列化对象

使用JSON.stringify()和JSON.parse()来序列化和还原JavaScript对象

o = {x:1, y:{z:[false, null, ""]}};

s = JSON.stringify(o);

p = JSON.parse(s);

 

对象方法

toString(), toLocaleString(), toJSON(), valueOf()

 

数组

稀疏数组,可以用Array()或简单指定数组索引值大于当前数组长度来创建稀疏数组

数组长度用o.length获取和设置,当设置的长度小于当前长度,多出来的会被删除。可以用Object.defineProperty()让数组的length属性变成只读的

JavaScript不支持多维数组,但可以用数组的数组来近似,如

var table = new Array(10);

for (var i=0; i<table.length; i++) {

table[i] = new Array[10];

}

数组方法

joint()将数组中所有元素转化为字符串并连接在一起

reverse()反转, sort()排序(可指定参数自定义排序函数), slice()返回子数组,参数是起始和末尾下标

slice()插入或删除数组元素的通用方法,push()和pop()能将数组当作栈来使用,

unshift()和shift()类似于push和pop,区别是shift是在头部而非微博进行插入和删除操作,

toString()和toLocaleString()

 

ECMAScript5中的数组方法

forEach(), map(), filter(), every()和some(),reduce()和reduceRight(), indexOf()和lastIndexOf()

 

检测数组类型

o instanceof Array或Array.isArray()

字符串也可以作为数组来对待,但区别是字符串数组是不可更改的

 

函数

构造函数调用:若没形参则可以省略括号如var o = new Object;

间接调用:使用call()和apply()

变长实参列表:实参对象。即可以在函数体内用arguments[x]来获得第x个参数

可以将函数对象用作属性值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值