获取浏览器的url: window.location.href
'use strict'
//用了严格模式后eval()会有自己独立的作用域
var str = 'NBA';
eval('var str = "CBA";alert(str);');
alert(str);
结果: CBA NBA
// 如果不用严格模式的话
eval() 中声明的变量会影响我们自己写的代码
不用严格 输出 CBA CBA
严格模式下是不允许直接不用修饰符声明变量的
username = 'nanfeiyan' //这样是会报错的
'use srtict'
不允许对象存在相同的属性
json
var obj = {username: 'nanfeiyan',age:23}; //js对象
//将js对象转化为json字符串
console.log(JSON.stringify(obj)); //'{"username":"nanfeiyan"}' //json字符串
var jsonStr = '{"username":"nanfeiyan","age":23}'; //json字符串
var jsduixiang = JSON.parse(jsonStr);//转化为js对象
var result = jsduixiang.username;
console.log(result);
Array
1. Array.prototype.indexOf(value) : 得到值在数组中的第一个下标
2. Array.prototype.lastIndexOf(value) : 得到值在数组中的最后一个下标
3. Array.prototype.forEach(function(item, index){}) : 遍历数组
4. Array.prototype.map(function(item, index){}) : 遍历数组返回一个新的数组,返回加工之后的值
5. Array.prototype.filter(function(item, index){}) : 遍历过滤出一个新的子数组, 返回条件为true的值
数组转化为字符串的方法
var arr = [1,2,3,5];
console.log(arr.join('-')) 1-2-3-5
arr.toString() //1,2,3,5
全局变量从创建的那一刻起就会一直保存在内存中,除非你关闭这个页面,局部变量当函数运行完以后就会销毁这个变量,假如你多次调用这个函数它下一次调用的时候又会重新创建那个变量,既运行完就销毁,回到最初的状态,简单来说局部变量是一次性的,用完就扔,下次要我再重新创建。
函数分为: 函数声明, 函数表达式
函数声明提前预解析
var a =1;
function f () {
a=20;
return;
function a () {}
}
f();
alert(a); //1
相当于
var a =1;
function f () {
var a; //因为函数预解析
a=20;
return;
function a () {}
}
f();
alert(a); //1
函数创建的时候他的作用域就确定了
var aa = 22;
function a () {
console.log(aa)
}
function b (fn) {
var aa = 11;
fn()
}
b(a); //22
在创建这个函数的时候,这个函数的作用域就已经决定了,而是不是在调用的时候,
函数创建的时候他的作用域已经确定了,但是函数中this的指向在函数定义的时候是确定不了的,只有函数执行的时候才能确定this到底指向谁,实际上this的最终指向的是那个调用它的对象
js中的回收机制
1.全局变量不会被回收。
2.局部变量会被回收,也就是函数一旦运行完以后,函数内部的东西都会被销毁。
3.只要被另外一个作用域所引用就不会被回收