javascript权威指南学习笔记

本文深入探讨JavaScript中数据类型的特性、转换方法以及变量、运算符的使用,同时覆盖对象和数组的操作,提供全面的数据处理指南。

一.数据类型:

js中,所有的数字都是浮点型的。

isnan()/isfinite() //检测数据类型

infinity //无穷大

number.max_value //可表示的最大数字

number.min_value //可表示的最小数字

数字转字符串

n+""

string(n)

n.tostring() //可以加参数 2-2进制 8-8进制 16-16进制

n.tofixed() //显示小数点后的指定位数

n.toexponential() //指数表示

n.toprecision() //指定有意思的位数

字符串转数字

+字符串

parseint(string,16) //截取整数,支持另一个参数指定解析的数字基数(2-36)

parsefloat() //截取整数和浮点数

布尔类型转换

1.布尔转其他

true-1 true-"true"

false-0 false-"false"

2.其他转布尔

数字 0/nan-false 其他-true

字符串 空字符串-false 其他-true

对象 空值/未定义的值-false 非空对象、数组、函数-true

3.显示转换

boolean(x)/!!x

null的转换

布尔 null-false

数字 null-0

字符串 null-"null"

undefined的转换

布尔 undefined-false

数字 undefined-nan

字符串 undefined-"undefined"

date类型转换/格式化

date -- string

date.togmtstring()

date.tolocalestring()

string -- date

new date(s)

string -- string

var date = new date(s)

date.tolocalestring()

===等同

数值和string只要值相等就完全相等。

两个值同为null或undefined就完全相等。

只要有一个为nan就不完全相等。

引用同一个对象、数组或函数就完全相等。

==相等

同类型数据比较,相等就相等。

不同类型数据比较,先转换成同类型数据再比较。

null和undefined相等。

二.变量

未用var声明的变量会被创建为全局变量。

js中没有块级作用域,函数中声明的所有变量在函数内都有定义。

----------------------------------------------

function test(){

for(var k=0;k

2:

3:

4:

5:(在ff中不能显示)

方法2和3有可能导致页面中的gif动画停止播放,推荐使用方法4

,运算符

先计算左边的参数,再计算右边的参数,然后返回右边参数的值

undefined不是保留字,为了确保其值不被改变,可以声明一个未赋值的变量

--------------------------------------------

var undefined; //undefined为undefined

--------------------------------------------

未声明的变量alert会报error错,typeof会返回undefined

null与undefined关系

undefined实际是null派生的,两者相等

var t1 = 56;

var t2 = 070;

var t3 = 0x38;

alert(t1==t2); //output:true

alert(t2==t3); //output:true

这说明无论是8进制、16进制,其变量都保存的是10进制的值。

数值运算优先调用valueof,字符串或输出运算优先调用tostring.

四.语句

switch语句

匹配case表达式是用===等同运算符判断的,所以表达式必须在没有类型转换的情况下进行。

for/in语句

for(variable in object)

statement

with语句(代码很难优化,运行速度慢,不建议使用)

with语句用于暂时修改作用域链

with(object)

statement

这条语句将object添加到作用域链的头部,然后执行statement,在把作用域链恢复到原始状态。

五.对象和数组

对象创建:

----------------------------------------------------

var obj = {};

var obj = new object();

----------------------------------------------------

遍历对象:

----------------------------------------------------

for(var name in o) statement

----------------------------------------------------

检测属性的存在:

----------------------------------------------------

if("x" in o)

if(o.x !==undefined)

//区别当一个属性定义为o.x=undefined时,上一个有操作,后一个不做任何操作。

----------------------------------------------------

删除属性:

----------------------------------------------------

delete o.xxx

----------------------------------------------------

删除操作将属性从对象中移除,for/in不会枚举该属性。

object的constructor属性

每个对象都有一个constructor属性,他引用初始化之个对象的构造函数。

----------------------------------------------------------------------------------------------------

if((type o == "object")&&(o.constructor == date)) //确定一个位置值的类型。

if((type o == "object")&&(o instanceof date)) //instanceof检查constructor属性的值。

----------------------------------------------------------------------------------------------------

检测对象的一个属性是不是非继承属性

----------------------------------------------------

o.hasownproperty("a");

----------------------------------------------------

检测一个对象的类型强烈建议使用object.property.tostring方法。

typeof只使用在检测一个变量是否已经定义。

----------------------------------------------------

object.prototype.tostring.call([]) //"[object array]"

typeof foo !== 'undefined'

----------------------------------------------------

instanceof 操作符用来比较两个操作数的构造函数。只有在比较自定义的对象时才有意义。

如果用来比较内置类型,将会和 typeof 操作符 一样用处不大。应该仅仅用来比较来自同一个 javascript 上下文的自定义对象

数组:

array对象的创建

1.new array(10)

2.new array("1","2")

3.["1","2"]

js中数组是稀疏的,所以数组的下标不必落在一个连续的数字范围

-------------------------------------------

a[0] = 1;

a[10000] = 10000;

//js解释器只给下标为0和10000的元素分配内存

-------------------------------------------

遍历数组:

js中数组是对象,用for in循环会枚举原型链上所有属性,过滤属性的方式是用hasownproperty函数,会比普通的for慢。

推荐使用经典的for循环,通过l=list.length来缓存数组的长度。

---------------------------------------

var list = [1,2,3,4,......10000000000];

for(var i=0;l=list.length;i(expression))

非捕获组

(?:expression)

消除一些不得不使用(),却又不需要使用捕获组而带来内存被占用,匹配效率降低的情况。

环视

匹配内容不计入最终匹配结果,零宽度[(?=expression),(?]+>/;

alert(str.match(reg)); //div

----------------------------------------------------------------------

匹配优先[贪婪模式]({m},{m,n},{m},?,*,+)/忽略优先[非贪婪模式]({m}?,{m,n}?,{m,}?,??,*?,+?)

在匹配成功的情况下,贪婪模式进行了更少的回溯,回溯过程需要进行控制权的交接

反向引用

捕获组在匹配成功时,会将子表达式匹配到的内容,保存到内存中一个以数字编号的组里,可以通过反向引用方式,引用这个局部变量的值

\1/\k

年份0001-9999,格式yyyy-mm-dd或yyyy-m-d

^(?:(?!0000)[0-9]{4}([-/.]?)(?:(?:0?[1-9]|1[0-2])\1(?:0?[1-9]|1[0-9]|2[0-8])|(?:0?[13-9]|1[0-2])\1(?:29|30)|

(?:0?[13578]|1[02])\1(?:31))|(?:[0-9]{2}(?:0[48]|[2468][048]|[13579][26])|(?:0[48]|[2468][048]|[13579][26])00)

([-/.]?)0?2\2(?:29))$

取img中的属性。

---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

var data = [' ', ' '] ;

var reg = /]+)\1)(?:(?!src=).)*src=(['"]?)([^'"\s>]+)\3[^>]*>/i;

for(var i=0;i


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值