JavaScript 基础入门(二)

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+ ")");  

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值