javascript-基础-类型转换&正则&异常&json&void
类型转换
在 JavaScript 中有 5 种不同的数据类型:
- string
- number
- boolean
- object
- function
 3 种对象类型:
- Object
- Date
- Array
 2 个不包含任何值的数据类型:
- null
- undefined
typeof
typeof "John"                 // 返回 string 
typeof 3.14                   // 返回 number
typeof NaN                    // 返回 number
typeof false                  // 返回 boolean
typeof [1,2,3,4]              // 返回 object
typeof {name:'John', age:34}  // 返回 object
typeof new Date()             // 返回 object
typeof function () {}         // 返回 function
typeof myCar                  // 返回 undefined (如果 myCar 没有声明)
typeof null                   // 返回 object
- NaN 的数据类型是 number
- 数组(Array)的数据类型是 object
- 日期(Date)的数据类型为 object
- null 的数据类型是 object
- 未定义变量的数据类型为 undefined
 如果对象是 JavaScript Array 或 JavaScript Date ,我们就无法通过 typeof 来判断他们的类型,因为都是 返回 Object。
constructor 属性
返回 JavaScript 变量的构造函数
"John".constructor                 // 返回函数 String()  { [native code] }
(3.14).constructor                 // 返回函数 Number()  { [native code] }
false.constructor                  // 返回函数 Boolean() { [native code] }
[1,2,3,4].constructor              // 返回函数 Array()   { [native code] }
{name:'John', age:34}.constructor  // 返回函数 Object()  { [native code] }
new Date().constructor             // 返回函数 Date()    { [native code] }
function () {}.constructor         // 返回函数 Function(){ [native code] }
用construct检查是否为数组和日期
//检查数组
function isArray(myArray) {
    return myArray.constructor.toString().indexOf("Array") > -1;
}
//检查日期
function isDate(myDate) {
    return myDate.constructor.toString().indexOf("Date") > -1;
}
数字/布尔/日期 转换为字符串
三者差不多,适用于:数字,字母,变量,表达式
//构造
String(x)         // 将变量 x 转换为字符串并返回
String(123)       // 将数字 123 转换为字符串并返回
String(100 + 23)  // 将数字表达式转换为字符串并返回
//tostring
x.toString()
(123).toString()
(100 + 23).toString()
//数字转字符串其他方法
toExponential()			//把对象的值转换为指数计数法。
toFixed()				//把数字转换为字符串,结果的小数点后有指定位数的数字。
toPrecision()			//把数字格式化为指定的长度。
字符串转数字
不能转则返回NaN
Number("3.14")    // 返回 3.14
Number(" ")       // 返回 0 
Number("")        // 返回 0
Number("99 88")   // 返回 NaN
//另外
parseFloat()
parseInt()
Number(false)     // 返回 0
Number(true)      // 返回 1
d = new Date();
Number(d)          // 返回 1404568027739
d = new Date();
d.getTime()        // 返回 1404568027739
一元运算符 +
可以将变量转化为数字
var y = "5";      // y 是一个字符串
var x = + y;      // x 是一个数字
var y = "John";   // y 是一个字符串
var x = + y;      // x 是一个数字 (NaN)
自动类型转换
5 + null    // 返回 5         null 转换为 0
"5" + null  // 返回"5null"   null 转换为 "null"
"5" + 1     // 返回 "51"      1 转换为 "1"  
"5" - 1     // 返回 4         "5" 转换为 5
正则表达式
语法
/正则表达式主体/修饰符(可选)
修饰符可选
例子
var patt = /runoob/i
在这里i的作用是忽略大小写
字符串方法
search()	返回正则匹配子串起始位置/字符串
replace()	替换正则匹配子串/字符串
比如
var str = "Visit Runoob!"; 
var n = str.search(/Runoob/i);
var n = str.search("Runoob");
var str = document.getElementById("demo").innerHTML; 
var txt = str.replace(/microsoft/i,"Runoob");
var txt = str.replace("Microsoft","Runoob");
基础元素
## 修饰符
修饰符	描述
i		执行对大小写不敏感的匹配。
g		执行全局匹配(查找所有匹配而非在找到第一个匹配后停止)。
m		执行多行匹配。
##模式
表达式	描述
[abc]	查找方括号之间的任何字符。
[0-9]	查找任何从 0 至 9 的数字。
(x|y)	查找任何以 | 分隔的选项。
##元字符
\d		查找数字。
\s		查找空白字符。
\b		匹配单词边界。
\uxxxx	查找以十六进制数 xxxx 规定的 Unicode 字符。
##量词
n+		匹配任何包含至少一个 n 的字符串。
n*		匹配任何包含零个或多个 n 的字符串。
n?		匹配任何包含零个或一个 n 的字符串。
RegExp对象,参考:http://www.runoob.com/jsref/jsref-obj-regexp.html
预定义了属性和方法的正则表达式对象
test() 测试文本是否匹配模式
var patt = /e/;
patt.test("The best things in life are free!");
# 如果匹配会输出true
# 也可以直接测试
/e/.test("The best things in life are free!")
exec()方法检测字符串中表达式匹配
/e/.exec("The best things in life are free!");
#如果不匹配返回null,如果匹配返回e
异常
try 语句测试代码块的错误
catch 语句处理错误
throw 语句创建自定义错误
例子:
function myFunction()
{
  try
  { 
    var x=document.getElementById("demo").value;
    if(x=="")    throw "值为空";
    if(isNaN(x)) throw "不是数字";
    if(x > 10) throw "太大";
    if(x < 5) throw "太小";
  }
  catch(err)
  {
    var y=document.getElementById("mess");
    y.innerHTML="错误:" + err + "。";
  }
}
javascript调试
- console.log()
- 断点
- debugger关键字,开启调试工具后,会在debug前停止
chrome中自带console
firefox需要Firebug
json
json转js对象
var text = '{ "sites" : [' +
    '{ "name":"Runoob" , "url":"www.runoob.com" },' +
    '{ "name":"Google" , "url":"www.google.com" },' +
    '{ "name":"Taobao" , "url":"www.taobao.com" } ]}';
//js内置的JSON.parse
obj = JSON.parse(text);
document.getElementById("demo").innerHTML = obj.sites[1].name + " " + obj.sites[1].url;
js对象转json
JSON.stringify(value[, replacer[, space]])
//replacer  转换数组或函数
//space 缩进
//例子
var str = {"name":"菜鸟教程", "site":"http://www.runoob.com"}
str_pretty1 = JSON.stringify(str)
document.write( "只有一个参数情况:" );
document.write( "<br>" );
document.write("<pre>" + str_pretty1 + "</pre>" );
 
document.write( "<br>" );
str_pretty2 = JSON.stringify(str, null, 4) //使用四个空格缩进
document.write( "使用参数情况:" );
document.write( "<br>" );
document.write("<pre>" + str_pretty2 + "</pre>" ); // pre 用于格式化输出
javascript:void(0)
计算一个表达式,但是不返回值
格式
<head>
<script type="text/javascript">
<!--
void func()
javascript:void func()
或者
void(func())
javascript:void(func())
//-->
</script>
</head>
创建超链接,用户点击不发生任何事
<a href="javascript:void(0)">单击此处什么也不会发生</a>
//警告信息
<head>
<script type="text/javascript">
<!--
//-->
</script>
</head>
<body>
<a href="javascript:void(alert('Warning!!!'))">点我!</a>
</body>
// a 将返回 undefined 
<head>
<script type="text/javascript">
<!--
function getValue(){
  var a,b,c;
  a = void ( b = 5, c = 7 );
  document.write('a = ' + a + ' b = ' + b +' c = ' + c );
}
//-->
</script>
</head>
href与void
包含一个位置信息
javascript:void(0)仅仅是一个死信息
<a href="javascript:void(0);">点我没有反应的!</a> 
<a href="#pos">点我定位到指定位置!</a> 
<br> 
... 
<br> 
<p id="pos">尾部定位点</p>
 
                    
                     
                    
                 
                    
                
 
 
                
            
         
         浙公网安备 33010602011771号
浙公网安备 33010602011771号