JavaScript数据类型
在 JavaScript 中的数据类型:
string(字符串)、number(数字,NaN
也属于其)、Boolean(逻辑)、object(对象,包括Object,Array<数组>,Date<日期>,null<空对象>)、function(函数)、、undefined(未设置)
ps:JavaScript 拥有动态类型。这意味着相同的变量可用作不同的类型
- 声明变量类型
当声明新变量时,可以使用关键词 "new" 来声明其类型:
var y= new Boolean; - typeof 操作符:用于返回变量或表达式类型
null与undefined:均表示什么都没有,且都可以用来清空变量;null类型为object,undefined类型为undefined - constructor属性:返回所有变量的构造
"john".constructor 得到
function String() { [native code] }
因此可以用来判断typeof无法判断区分的Array和Date:
var fruits = ["Banana", "Orange", "Apple", "Mango"];
document.getElementById("demo").innerHTML = isArray(fruits);
function isArray(myArray) {
return myArray.constructor.toString().indexOf("Array") > -1;
}
个人目前理解的是:可以用isArray()判断是否为数组,而该函数的代码块是以constructor为核心的。
JavaScript 类型转换
方法:1.通过使用 JavaScript 函数;2.通过 JavaScript 自身自动转换
- 转化为字符串:
- String(x),适用于任何类型的数字,字母,变量,表达式
- x.toString Boolean和Date()也适用,其他不清楚
- 转化为数字
Number() - 字符串转化为数字,包含数字转化为数字,空字符转化为0,其他字符(如"99 88")转化为NaN(不是个数字)
- Boolean中true转化为1,false转化为0
- 日期转化为数字
d = new Date(); 法一
Number(d)
d = new Date(); 法二
d.getTime()
Operator + 也可用于将变量转换为数字
JavaScript 错误 - throw、try 和 catch
try 语句测试代码块的错误;catch 语句处理错误;throw 语句创建自定义错误
JavaScript 抛出(throw)错误:当错误发生,事情出问题时,JavaScript 引擎通常会停止,并生成一个错误消息,称之为JavaScript 将抛出一个错误。
- JavaScript try 和 catch
try语句中的代码在执行时会对其进行错误检测,catch语句定义当try代码块发生错误时,所执行的代码块。
try与catch在JavaScript中总是成对出现。
try {
//在这里运行代码
} catch(err) {
//在这里处理错误
}
var txt="";
function message()
{
try {
adddlert("Welcome guest!"); //alert拼错为adddlert
} catch(err) {
txt="本页有一个错误。\n\n"; //\n用于换行
txt+="错误描述:" + err.message + "\n\n";//用于显示try代码块中的错误信息
txt+="点击确定继续。\n\n";
alert(txt);
}
}
- Throw语句
用于创建或抛出异常。如果把 throw 与 try 和 catch 一起使用,那么您能够控制程序流,并生成自定义的错误消息。
throw exception
异常可以是 JavaScript 字符串、数字、逻辑值或对象。
exception
为后面的err
的内容,即错误信息
JavaScript正则表达式(regex或RE)
/正则表达式主体/修饰符(可选)
search() 和 replace()
search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式或字符串相匹配的子字符串,并返回子串的起始位置。
replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式或字符串匹配的子串。
search() 方法
使用正则表达式搜索 "Runoob" 字符串,且不区分大小写
var str = "Visit Runoob!";
var n = str.search(/Runoob/i);
使用字符串作为参数,字符串参数会转换为正则表达式,区分大小写
var str = "Visit Runoob!";
var n = str.search("Runoob");
输出为数字,即字串的起始位置replace()方法
同上
var str = document.getElementById("demo").innerHTML;
var txt = str.replace(/microsoft/i,"Runoob");
正则表达式使得搜索功能更加强大(如实例中不区分大小写)。
正则表达式模式和修饰符详见http://www.runoob.com/js/js-regexp.html
使用 RegExp 对象
在 JavaScript 中,RegExp 对象是一个预定义了属性和方法的正则表达式对象。
- 使用 test()
est() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false - 使用exec()
exec() 方法用于检索字符串中的正则表达式的匹配,该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
JavaScript 调试(console)
- console.log() 方法
可以使用 console.log() 方法在调试窗口上打印 JavaScript 值 - 设置断点
在调试窗口中,你可以设置 JavaScript 代码的断点
在每个断点上,都会停止执行 JavaScript 代码,以便于我们检查 JavaScript 变量的值
在检查完毕后,可以重新执行代码(如播放按钮) - debugger 关键字
debugger 关键字 与在调试工具中设置断点的效果是一样的
如果没有调试可用,debugger 语句将无法工作
JavaScript变量提升
变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部JavaScript 只有声明的变量会提升,初始化的不会
var y
为变量声明 var y=7
为变量初始化
ps: JavaScript 严格模式(strict mode)不允许使用未声明的变量
JavaScript 严格模式(use strict)
"use strict" 的目的是指定代码在严格条件下执行
严格模式下你不能使用未声明的变量
"use strict" 指令只运行出现在脚本或函数的开头
严格模式通过在脚本或函数的头部添加 "use strict"; 表达式来声明
/*在函数内部声明是局部作用域 (只在函数内使用严格模式)*/
x = 3.14; // 不报错
myFunction();
function myFunction() {
"use strict";
y = 3.14; // 报错 (y 未定义)
}
严格模式体现了Javascript更合理、更安全、更严谨的发展方向,为未来新版本的Javascript做好铺垫
具体限制
JavaScript易错点总结
JavaScript 表单验证
表单验证分为JS验证和浏览器自动验证。
required
属性用于进行自动验证,约束验证(HTML5);
也分为服务端数据验证和客户端数据验证side validation
- 验证输入内容是否为空
function validateForm() {
var x = document.forms["myForm"]["fname"].value;
if (x == null || x == "") {
alert("需要输入名字。");
return false;
}
}
<form name="myForm" action="demo_form.php" onsubmit="return validateForm()" method="post">
名字: <input type="text" name="fname">
<input type="submit" value="提交">
</form> - 验证输入的数字
- 自动验证
<form action="demo_form.php" method="post">
<input type="text" name="fname" required>
<input type="submit" value="提交">
</form> - 必填(或必选)项目
function validateForm()
{
var x=document.forms["myForm"]["fname"].value;
if (x==null || x=="")
{
alert("姓必须填写");
return false;
}
}
<form name="myForm" action="demo-form.php" onsubmit="return validateForm()" method="post">
姓: <input type="text" name="fname">
<input type="submit" value="提交">
</form> - E-mail 验证
indexOf
lastIndexOf
用于表示搜索字符的位置
function validateForm(){
var x=document.forms["myForm"]["email"].value;
var atpos=x.indexOf("@");
var dotpos=x.lastIndexOf(".");
if (atpos<1 || dotpos<atpos+2 || dotpos+2>=x.length){
alert("不是一个有效的 e-mail 地址");
return false;
}
}
<form name="myForm" action="demo-form.php" onsubmit="return validateForm();" method="post">
Email: <input type="text" name="email">
<input type="submit" value="提交">
</form>
- JavaScript保留关键字
建议不要使用const
有的浏览器引擎支持它等价于var
JSON
JSON 是用于存储和传输数据的格式。
JSON 通常用于服务端向网页传递数据 。
JSON 英文全称 JavaScript Object Notation, 是一种轻量级的数据交换格式,是独立的语言。
JavaScriptvoid
void 是 JavaScript 中非常重要的关键字,该操作符指定要计算一个表达式但是不返回值。
href="#"与href="javascript:void(0)"的区别
# 包含了一个位置信息,默认的锚是#top 也就是网页的上端。
而javascript:void(0), 仅仅表示一个死链接。
在页面很长的时候会使用 # 来定位页面的具体位置,格式为:# + id。
如果你要定义一个死链接请使用 javascript:void(0) 。-
语法格式
<head>
<script type="text/javascript">
或者 void(func()) javascript:void(func()) //--> </script> </head>