Js基本语法、变量、数据类型

基本语法:

  1. Javascript跟Java一样区分大小写
  2. 变量是弱类型的:变量可以存放不同类型的值
  3. 每行结尾的分号可有可无
  4. 括号代表代码块(与大多数编程语言不一样,JavaScript的区块不构成单独的作用域(scope)。也就是说,区块中的变量与区块外的变量,属于同一个作用域。)
  5. 变量声明不是必须的

严格地说,var a = 1 与 a =1,这两条语句的效果不完全一样,主要体现在delete命令无法删除前者。不过,绝大多数情况下,这种差异是可以忽略的。

变量

通俗地来讲,变量就是用来装内容的容器。那么所指的内容又是什么?在Js中变量可以存在两种类型的值:原始值、引用值。而这两种形式的值又引出了Js的数据类型:原始类型、引用类型。

原始类型有5种: Undefined、Null、Boolean、Number 和 String
引用类型:对象(方法和属性的集合)。
对象又可以分成三个子类型:狭义的对象(object)、数组(array)、函数(function)

1、那么原始值与引用值又有什么不同?

这就涉及到了Js的内存机制。原始类型数据占据的空间是固定的,所以可将他们存储在较小的内存区域 - 中。这样存储便于迅速查寻变量的值。
所以原始类型的值是按值访问的(简单数据段)。

而引用值是指的是那些可能由多个值构成的对象。对象拥有方法跟属性。javascript**不允许直接访问内存中的位置,也就是说不能直接操作对象的内存空间**,那我们操作啥呢? 实际上,是操作对象的引用,
所以引用类型的值是按引用访问的。

准确地说,引用类型的存储需要内存的栈区和堆区(堆区是指内存里的堆内存)共同完成,栈区内存保存变量标识符和指向堆内存中该对象的指针,也可以说是该对象在堆内存的地址。

2、然而为什么会有栈内存和堆内存之分?

通常与垃圾回收机制有关。为了使程序运行时占用的内存最小。
栈的优势是,存取速度比堆要快,仅次于直接位于CPU中的寄存器。但缺点是,存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
一般来说,栈内存中存放的是存储对象的地址,而堆内存中存放的是存储对象的具体内容。对于原始类型的值而言,其地址和具体内容都存在与栈内存中;而基于引用类型的值,其地址存在栈内存,其具体内容存在堆内存中。堆内存与栈内存是有区别的,栈内存运行效率比堆内存高,空间相对堆内存来说较小,反之则是堆内存的特点。所以将构造简单的原始类型值放在栈内存中,将构造复杂的引用类型值放在堆中而不影响栈的效率。

var str = "Hello"; // str:"Hello"存在栈中
var obj = {value:"Hello"}; // obj存在栈中,{value:"Hello"}存在堆中,通过栈中的变量名obj(访问地址)访问

3、内存中的存储对象生命周期是怎么样的呢?
我们来看看MDN中的介绍:
1.当对象将被需要的时候为其分配内存
2.使用已分配的内存(读、写操作)
3.当对象不在被需要的时候,释放存储这个对象的内存
第一步和第二步在所有语言中都是一样的,第三步的操作在JavaScript中不是那么明显。

如果本宝宝前面描述还足够清晰,您对下面代码的运行结果也不会惊讶!当然很多描述也是借鉴很多地方来的

var a = "a"; var b = a; console.log(a,b);
结果: a a
var a = "a"; var b = a; b = "b"; console.log(a,b);
结果: a b
var a = {a:"a"}; 
var b = a;
console.log(a,b);
结果: Object {a: "a"} Object {a: "a"}
var a = {a}; var b = a; b.a = "b"; console.log(a,b);
结果: Object {a: "b"} Object {a: "b"}
var a = {a:"a"}; b.a = "b"; console.log(a,b);
结果: Object {a: "a"} Object {a: "b"}
var a = {a:"a"}; var b = a; b.a = "b"; console.log(a,b);
结果: Object {a: "b"} Object {a: "b"}
var a = {a:"a"}; var b = a; b = "b"; console.log(a,b);
结果: Object {a: "a"} "b"

讲了变量、列了数据类型,那么ECMAScript 是如何判断一个值的数据类型的?变量的“隐式转换”又体现在哪里?ES5的变量声明还有什么不妥?null与undefined的区别又是什么?不由得又想到了“变量提升”这个词。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值