一.数据类型:
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^)/
本文深入探讨JavaScript中数据类型的特性、转换方法以及变量、运算符的使用,同时覆盖对象和数组的操作,提供全面的数据处理指南。

1502

被折叠的 条评论
为什么被折叠?



