1、变量声明时如果不使用 var 关键字,那么它就是一个全局变量,即便它在函数内定义。全局变量可应用于页面上的所有脚本。
2、在计算机程序中,经常会声明无值的变量。未使用值来声明的变量,其值实际上是 undefined。
3、如果重新声明 JavaScript 变量,该变量的值不会丢失。在以下两条语句执行后,变量 carname 的值依然是 "Volvo":
var carname="Volvo";
var carname;
4、您可以在文本字符串中使用反斜杠对代码行进行换行。下面的例子会正确地显示:
document.write("你好 \
世界!");
5、在 JavaScript 中创建三种消息框:警告框、确认框、提示框。 可加HTML标签
window.alert() 方法可以不带上window对象,直接使用alert()方法。当警告框出现后,用户需要点击确定按钮才能继续进行操作。
alert("你好,我是一个警告框!");
window.confirm() 方法可以不带上window对象,直接使用confirm()方法。当确认卡弹出时,用户可以点击 "确认" 或者 "取消" 来确定用户操作。
confirm("是否删除");
window.prompt() 方法可以不带上window对象,直接使用prompt()方法。当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。
prompt("请输入用户名","admin");
6、JavaScript 支持嵌套函数。嵌套函数可以访问上一层的函数变量。
javas闭包:闭包就是一个函数引用另一个函数的变量,因为变量被引用着所以不会被回收,因此可以用来封装一个私有变量。这是优点也是缺点,不必要的闭包只会增加内存消耗。或者说闭包就是子函数可以使用父函数的局部变量,还有父函数的参数。
varadd = (function(){
varcounter = 0;
returnfunction(){returncounter += 1;}
})();
add();
add();
add();// 计数器为 3
注意add方法中的return, 它return的并不是1,2,3这样的数值,而是return了一个方法,并且把这个方法赋值给了add变量。
那么在这个function自运行一遍之后,其实最后赋值给add的是return counter += 1 这段代码。
所以后面每次调用add() 其实都是在调用return counter += 1。
onload 事件可用于检测访问者的浏览器类型和浏览器版本,并基于这些信息来加载网页的正确版本。
onload 和 onunload 事件可用于处理 cookie。
8、你可以使用 typeof 操作符来检测变量的数据类型。
typeof "John" // 返回 string
typeof 3.14 // 返回 number
typeof false // 返回 boolean
typeof [1,2,3,4] // 返回 object
typeof {name:'John', age:34} // 返回 object
判断某个变量是否是某个对象的实例则要选择使用另一个关键语法 instanceof
var result = objectName instanceof objectType
返回布尔值,如果是指定类型返回 true,否则返回 false
9、任何变量都可以通过设置值为 undefined 来清空。 类型为 undefined.
null是一个只有一个值的特殊类型。表示一个空对象引用。用 typeof 检测 null 返回是object。
typeof undefined // undefined
typeof null // object
null === undefined // false
null == undefined // true
PS: == 用于比较 判断 两者相等 ==在比较的时候可以转自动换数据类型
===用于严格比较 判断两者严格相等 ===严格比较,不会进行自动转换,要求进行比较的操作数必须类型一致,不一致时返回flase。
在 JavaScript 中, null 用于对象, undefined 用于变量,属性和方法。
对象只有被定义才有可能为 null,否则为 undefined。
10、类型转换部分。在 JavaScript 中有
5 种不同的数据类型:String number boolean function object
3 种对象类型:Object Date Array
2 个不包含任何值的数据类型: null undefined
- NaN 的数据类型是 number
- 数组(Array)的数据类型是 object
- 日期(Date)的数据类型为 object
- null 的数据类型是 object
- 未定义变量的数据类型为 undefined
如果对象是 JavaScript Array 或 JavaScript Date ,我们就无法通过 typeof 来判断他们的类型,因为都是 返回 Object。
11、constructor 属性返回所有 JavaScript 变量的构造函数。
你可以使用 constructor 属性来查看对象是否为数组或日期:return myArray.constructor.toString().indexOf("Array") > -1; //true
return myDate.constructor.toString().indexOf("Date") > -1; // true
12、转换类型全局方法 Number() 可以将字符串转换为数字。非法字符串会转换为 NaN (不是个数字)
13、你可以使用字符来定义和创建 JavaScript 对象:
var person = {firstName:"John", lastName:"Doe", age:50, eyeColor:"blue"};
你可以通过两种方式访问对象属性:
person.lastName;person["lastName"];
11、在 JavaScript 中,RegExp 对象是一个预定义了属性和方法的正则表达式对象。test() 方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回 true,否则返回 false。
var patt = /e/; /正则表达式主体/修饰符(i,g,m可选项)
patt.test("The best things in life are free!");
在 JavaScript 中,正则表达式通常用于两个字符串方法 : search() 和 replace()。
search() 方法 用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
varstr = "Visit Runoob!";
varn = str.search(/Runoob/i); // 6
replace() 方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
str.replace(/microsoft/i,"Runoob");
12、debuggerdebugger 关键字用于停止执行 JavaScript,并调用调试函数。
这个关键字与在调试工具中设置断点的效果是一样的。如果没有调试可用,debugger 语句将无法工作。
13、JavaScript 中,函数及变量的声明都将被提升到函数的最顶部。变量提升:函数声明和变量声明总是会被解释器悄悄地被"提升"到方法体的最顶部。
JavaScript 中,变量可以在使用后声明,也就是变量可以先使用再声明。
x = 5; // 变量 x 设置为 5
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x; // 在元素中显示 x
var x; // 声明 x
JavaScript 只有声明的变量会提升,初始化的不会。
var x = 5; // 初始化 x
elem = document.getElementById("demo"); // 查找元素
elem.innerHTML = x + " " + y; // 显示 x 和 y
var y = 7; // 初始化 y y 输出了 undefined
14、"use strict" 指令
在 JavaScript 1.8.5 (ECMAScript5) 中新增。
它不是一条语句,但是是一个字面量表达式,在 JavaScript 旧版本中会被忽略。
"use strict" 的目的是指定代码在严格条件下执行。严格模式下你不能使用未声明的变量。
"use strict";
x = 3.14; // 报错 (x 未定义)
15、JavaScript 中的所有数据都是以 64 位浮点型数据(float) 来存储。所有的编程语言,包括 JavaScript,对浮点型数据的精确度都很难确定
var x = 0.1;
var y = 0.2;
var z = x + y // z 的结果为 0.3
if (z == 0.3) // 返回 false
16、在每个代码块中 JavaScript 不会创建一个新的作用域,一般各个代码块的作用域都是全局的。
以下代码的的变量 i 返回 10,而不是 undefined:
for (var i = 0; i < 10; i++) {
// some code
}
return i;
17、href="#"与href="javascript:void(0)"的区别
# 包含了一个位置信息,默认的锚是#top 也就是网页的上端。而javascript:void(0), 仅仅表示一个死链接。
在页面很长的时候会使用 # 来定位页面的具体位置,格式为:# + id。如果你要定义一个死链接请使用 javascript:void(0) 。
18、window对象
所有浏览器都支持 window 对象。它表示浏览器窗口。
所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。
全局变量是 window 对象的属性。全局函数是 window 对象的方法。
甚至 HTML DOM 的 document 也是 window 对象的属性之一:
window.document.getElementById("header");
与此相同:
document.getElementById("header");
19、Window Location
window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。
location.href 属性返回当前页面的 URL。
location.pathname 属性返回 URL 的路径名。
location.hostname 返回 web 主机的域名
location.pathname 返回当前页面的路径和文件名
location.port 返回 web 主机的端口 (80 或 443)
location.protocol 返回所使用的 web 协议(http:// 或 https://)
20、window history
window.history 对象包含浏览器的历史。
history.back() - 与在浏览器点击后退按钮相同window.history.back();
history.forward() - 与在浏览器中点击向前按钮相同
21、Cookie 用于存储 web 页面的用户信息。
读取:document.cookie 将以字符串的方式返回所有的 cookie,类型格式: cookie1=value; cookie2=value; cookie3=value;
创建:document.cookie="username=John Doe"; //document.cookie=" key1 = value ;key2 = value";
修改:在 JavaScript 中,修改 cookie 类似于创建 cookie,旧的 cookie 将被覆盖。
22、json转换
JavaScript 函数 eval() 可用于将 JSON 文本转换为 JavaScript 对象。
我们可以使用 JSON.parse() 方法将JSON数据转换为 JavaScript 对象。
eval() 函数使用的是 JavaScript 编译器,可解析 JSON 文本,然后生成 JavaScript 对象。必须把文本包围在括号中,这样才能避免语法错误:
var obj = eval ("(" + txt + ")");
var txt = '{ "sites" : [' +'{ "name":"百度" , "url":"www.baidu.com" },' +
'{ "name":"google" , "url":"www.google.com" },' +'{ "name":"微博" , "url":"www.weibo.com" } ]}';
var obj = eval ("(" + txt + ")");
document.getElementById("name").innerHTML=obj.sites[0].name
document.getElementById("url").innerHTML=obj.sites[0].url
JSON.parse() 方法 解析前要确保你的数据是标准的 JSON 格式,否则会解析出错。
var obj = JSON.parse('{ "name":"steveTao", "age":24, "height":"172" }');
JSON 通常用于与服务端交换数据。在向服务器发送数据时一般是字符串。
我们可以使用 JSON.stringify() 方法将 JavaScript 对象转换为字符串。
var obj = { " name " : " steveTao " , " age " : 24 , " height " : " 172 " } ; var myJSON = JSON.stringify(obj);