javascript基础一:https://blog.csdn.net/wcc27857285/article/details/88775507
一.数组
在js中数组也是个对象,我们已经了解数组可以这样写
var arr=[ 1,2,3,4];
上面是一种简易的写法,使用对象的方式创建数组就是:
var arr=new Array() ; //创建一个空数组
var arrs =new Array(1,2,3); //创建一个包含三个元素的数组
js中万物皆对象,包括函数,(除了null和undefined不是对象)
二.ECMAScript 6
ECMAScript 6(简称ES6)是于2015年6月正式发布的JavaScript语言的标准,正式名为ECMAScript 2015(ES2015)。它的目标是使得JavaScript语言可以用来编写复杂的大型应用程序,成为企业级开发语言 。
另外,一些情况下ES6也泛指ES2015及之后的新增特性,虽然之后的版本应当称为ES7、ES8等
ES6 加入了let ,可以定义块级元素变量, 使js 有块级作用域
浏览器支持情况:
目前各大浏览器基本上都支持 ES6 的新特性,其中 Chrome 和 Firefox 浏览器对 ES6 新特性最友好,IE7~11 基本不支持 ES6。
以下是各大浏览器支持情况及开始时间:
ES6的兼容性问题:
ES6可以帮助快速开发项目,但是由于很多浏览器还不支持ES6,很多团队为此开发出了多种语法解析转换工具,把我们写的ES6语法转换成ES5,相当于在ES6和浏览器之间做了一个翻译官。比较通用的工具方案有babel,jsx,traceur,es6-shim等。
三.基本包装类型
看下面这段代码:
var s="abc" ;
var len =s.length;
console.log(len); //输出3
为什么s能有length 这个属性?
js中有六种数据类型,包括五种基本数据类型(Number,String,Boolean,Undefined,Null),和一种复杂数据类型(Object)。
我们知道只有对象有属性和方法,那为什么s能有length属性呢。
是因为在调用基本类型的属性和方法时,会把基本类型自动包装成基本包装类型,就是包装成对象,也就是String对象
在执行 var len =s.length; 发生了几件事:
var _s=new String('abc');
var len =_s.length;
_s=null; //释放_s对象
同理,数值类型和布尔类型也是同理,Number和Boolean分别是他们的构造函数
四.字符串的不可变性
怎么理解不可变:
var s='hello' ;
s='world';
s其实是新建了一个内存空间,存放world,然后把s指向了world这个字符串的地址,而hello字符串还存在内存中
因此C# 中大量拼接字符串的时候建议使用stringbuilder,而不是string。原因就是因为每个字符串都会新开辟空间
很多语言都把字符串设计成不可变,js也是如此,原因就是字符串是一个程序最常用的数据类型
简单来说有一下几个优点:
1.多线程安全
2.缓存hashcode,提高性能,不用每次计算字符串的hashcode
3.会内部维护一个字符串常量区,可以节省内存空间
五.闭包
MDN的解释:Closures(闭包)是使用被作用域封闭的变量,函数,闭包等执行的一个函数的作用域。通常我们用和其相应的函数来指代这些作用欲。(可以访问独立数据的函数)
简化:闭包是一个函数的作用域,而作用域一般指函数,所以闭包就是一个函数
通俗:闭包是指有权访问另一个函数作用域中的变量的函数。创建闭包的常见方式就是在一个函数内部创建另一个函数。
例子:
function func(){
var n=10;
return function(){
return n;
};
}
var f=func();
consloe.log(f());
func函数的返回值是一个匿名函数,调用func函数返回的匿名函数赋值给f,调用f(),此时就达到了在全局作用域中访问局部作用域中的变量n的效果,这个f 函数就是闭包。f 函数能访问func中的变量。
无法理解:为什么局部作用域访问全局作用域的变量不叫闭包,而全局作用域访问局部的就叫闭包。为什么从下往上访问不叫闭包,而从上往下叫闭包?
解释:因为js中有作用域链,从下往上是合法的,但是无法做到从上往下,然而闭包能解决这个问题。
六.继承
js中没有继承,但是可以曲线救国,可以使用常见的6中方式来实现继承的效果。
七.JSON
JSON就是JavaScript Object Notation(JavaScript 对象表示法),但是json是跨语言和平台的
js对象转为json字符串:
var jsonstring=JSON.stringify(jsobj);
js数组转为json字符串,和上面的一样:
var jsonstring=JSON.stringify(arr);
反过来,json字符串转为js对象
1.推荐使用JSON.parse
var obj = JSON.parse(txt);
或者:使用eval,这个方式有潜在的不安全性
var obj = eval ("(" + jsonstring+ ")");