2.js引入、变量、值类型

1、几大主流浏览器及其内核:
IE () trident
Chrome webkit/blink(2014年后)
firefox Gecko /gaikou/
Opera presto
safari webkit (webkit是google 和 apple一起研发的)
主流浏览器:1-再市场上有一定的市场份额,大于3%左右;2-有独立研发的内核,比如中国的360 猎豹 uc不缺市场占有率,但就不是主流的
2、引入js
页面级js

除非后期编程,用script 标签来存储数据
<script type='text/tpl'><script>  用type='text/tpl'  故意让他运行不了,这样只能放代码,不能运行,当一个库存来用;

外部js文件
<script type='text/javascript' src='a.js'></script>

为了符合web标准(w3c标准中的一项)中的结构html、样式css、行为js相分离,通常会采用 引入外部js文件
3者分离看起来清晰,而且维护好维护;

3、js基础语法–变量
html和css 准确来讲不叫编程语言,顶多叫脚本语言,叫计算机语言的一个小门类;
编程语言必须有个特点:有变量 有函数 有数据结构可以进行基本运算;

编程语言最基本的是有变量,那什么叫变量?

变量(variable) 就像家里 冰箱一样,用来存放东西,以便后续利用,程序里的变量也是,
我们会把数据放到一个和一些变量里,以便后续使用

3.1、申请/创建变量:声明、赋值分解;  单一var模式;

 var(关键字) a;  //我们向系统申请了一个变量的房间,这个房间的名字叫做a(a名用来辨识的);  --这个叫做变量声明
 a=12;  //把100 赋值给a;  --变量赋值

 var a = 100;  //也是2个过程,向系统申请房间,起名a--声明变量; 把100赋值给a--变量赋值;

 var a,b,c,d,e; //开5个房间--这种形式叫做 单一var 模式,但是开发格式是如下:
 var a,
 	 b,
 	 c,
 	 d,
 	 e;

也可以直接赋值:
var a = 1,
	b = 2,
	c = 3,
	d = 5,
	e;


 3.2、变量命名规则:

 	变量的名字必须以英文字母、_ 或者$ 符开头,例如:abc    _abc   $abc
 	变量名可以包含  英文字母、_、$、数字,例如: a   a1  $a1   _$a1   $_a1$  都可以
 	不可以使用系统关键字,保留字作为变量名;

 	// 关键字--是系统定义的单词,在系统里有特殊的语法含义: var  if  do  else  break  in  等等
 	// 保留字--系统时刻在更新升级,虽然现在系统里没有含义,但是未来可能会有含义:int float  const  class 等等

 3.3 运算优先级大于赋值优先级

	var a = 1,
		b = 2,
		c;
		c = a + b;  //a+b 运算优先级大于赋值的优先级,先运算再赋值  

4、基本语法–变量的 值类型(数据类型):不可改变的原始值(栈数据) 和 引用值(堆数据)

4.1数据是分类型的,数据类型大致分2种:原始值 和 引用值;
原始值 分 5 大类:Number、String、Boolean、undefined、null
var a = -123.23; 数字类型Number;
// js是动态语言:动态语言基本都是解释性语言,解释性语言基本都是脚本语言;
// 我们数字的类型 是浮点型,不是整型int(intiger);

	var b = 'abc'; b = '123'; //这也是字符串123    字符串类型String

	var c = false/true;  布尔Boolean
	// 计算机是基于数字0诞生的,计算机的基础就是01010101, 机械码就是0 1 组成的,8位的010101组成一个字母,然后把字母串起来变成程序语言;
	// 布尔这个人发明了两个对立逻辑:true 和 false;然后把逻辑进行了引申,true--1,false--0,然后形成了计算机的基础语言

	var d = undefined; //undefined是一个类型,表示:未定义的
	一般我们声明了一个变量但没往里赋值,如果想打印变量里的内容,打印出来就是undefined;
	var e;  document.write(e);  //变量声明了,但没赋值;  打印出来就是undefined;

	var f = null;  //null值表示一种占位,没有根本的意义,代表空;
	比如写一个方法,把这个方法赋值到一个变量g里面去,以后有一天觉得这个变量g里不应该再装这个方法了,如何把这个方法删掉呢?
	方法是删不掉,但可以覆盖掉,我们就拿空值 null来覆盖,以便后续的利用;

引用值:有很多类型,如:Array数组类型、 Object对象类型、function方法类型、data、RegExp正则表达式等等
   var arr = [1,2,false,'abc'];  //定义一个数组,以前声明原始值是申请一个框,现在数组是一个大框,里面有很多小格,每一个格都可以放一个变量;

4.2为什么分成原始值 和 引用值 这两种值呢?因为这两种值 赋值的情况不太一样!

原始值的赋值:
var a = 'abc'; //这是原始值类型 String 字符串类型;// js是 由变量值 决定了变量的类型;
// js变量是什么类型,取决于后面的变量值,和其他语言不一样,其他语言是类型决定值,int a = 10;这样必须是整数; string b = 'abc'; 这必须是字符串;
a = 10;  //js是动态解释性语言,解释一行 执行一行,所以虽然之前是字符串类型,再赋值赋数字类型 也是可以的
var b = a;  //把a的值拿出来,放到b的房间里去;
a = 20;
console.log(b);  //打印出来是 10

原始值是: 把变量a赋值给变量b(var b = a;),变量a改变后,变量b 不变(还是a改变之前的值);

引用值的赋值:
var arr = [1];
var arr1 = arr;
arr.push(2);   //此时arr=[1,2]
document.write(arr1);  //打印 [1,2]

引用值是: 把变量arr赋值给变量arr1(var arr1 = arr),变量arr改变后,变量arr1也改变了

注意了:   var arr = [1,2];   //栈内存 arr  中存放的是,堆内存[1,2]的地址heap1001; (arr = heap1001,heap1001--指向内容[1,3])
    	   var arr1 = arr;   //引用值的赋值,相当于把堆内存[1,2]的地址heap1001 给了arr1; (arr1=heap1001)
		   arr = [1,3];     //重新给arr 赋值, 值为堆内存中[1,3]的地址heap1002, (arr = heap1002)
		   console.log(arr1);  //输出[1,2]      arr1中放的是heap1001这个地址 指向的堆内存房间

4.3 栈数据 和 堆数据
原始值 和 引用值 都是往计算机里存的,但是计算机对他们有偏见:原始值 和 引用值存的地方不一样:原始值 存在栈(stack)中,引用值大致上是存在堆(heap)中
原始值 存在栈(stack)中, 引用值大致上是存在堆(heap)中

原始值是存在 栈 里的,栈内存有个规则:first in last out 。先进去的后出来。类似 有底没有顶的盒子。栈内存之间的赋值是拷贝数据。

堆内存 类似储物格子,怎么放进去的 怎么拿出来,里面放的引用值。
var arr = [1,2]; //第一步声明的时候 var arr ; 这个时候不知道arr的类型,开始在栈内存中申请一个房间,起名arr;
第二部赋值的时候,发现 值[1,2]是引用值,就在堆内存中找一个房间,把 [1,2]放在堆内存里,然后在栈内存中放入堆内存的地址,例如 heap1001
这样就在堆内存中的值 和 栈内存的地址 间连上了一条线;

原始值 和 引用值的不同是 赋值形式的不同。

栈内存里放的是堆内存的地址heap1001。
然后 var arr1 = arr; //赋值的时候,是把栈内存里 存放的arr的地址heap1001 拷贝给 arr1

原始值给原始值拷贝的是数据,引用值 给 引用值拷贝的是地址;

发布了26 篇原创文章 · 获赞 3 · 访问量 7932

猜你喜欢

转载自blog.csdn.net/Eva3288/article/details/102887481