JavaScript-基础变量

一个网页的基础元素:

1.html属于搭建页面结构

2.css美化页面

3.JavaScript给页面添加行为

JavaScript属于解释型语言,不需要编译,可以直接插入到html页面中由浏览器解释执行。对于Java程序员来讲,这应该是接触的第一个解释型语言,那么它与我们平时用到的编译型语言–Java有什么不同呢?

解释执行:由解释器根据输入的数据当场执行而不生成任何的目标程序。

编译执行:先将源代码编译成目标语言(如:字节码文件),之后通过相应的执行程序(JVM)进行加载执行。

在知乎上看到一个比较有意思的解释:

编译执行相当于先把菜一次性都做好,然后摆在餐桌上吃;而解释执行就相当于吃火锅,下一个吃一个。

如果单纯的考虑吃饭速度(执行效率)肯定是炒菜(编译执行)较快,因为可以直接吃而火锅还得煮。

引入JavaScript

1.直接在事件中调用

<input type="button" value="我是按钮" onclick="alert('helloworld1')">
复制代码

2.通过script标签引入

<!--可以写在任意位置,推荐写在head标签中-->
<script type="text/javascript">
    alert('helloworld2')
</script>
复制代码

在日常的开发中,我们通常会定义一个.js文件,将用到的方法统一定义在一个文件中,如果需要调用就将该文件引入。

<!--script必须有关闭标签,不能自闭。(会导致运行出错)-->
<script src="first.js"></script>
复制代码

基本数据类型

JavaScript共定义了七种数据类型,分为 “基本类型” 和 “引用类型” 两大类:

  • 基本类型:String、Number、Boolean、Symbol、Undefined、Null
  • 引用类型:Object

String

JavaScript中采用的是Unicode的编码方式,中文与英文均占2个字符。

具体的编码细节,参见:

同Java类似,基本数据类型是不具备可操作的方法的,为了方便对其进行操作就定义了相应的包装类型。所以当你调用方法的时候,实质上是创建了包装类的对象调用,返回值后再将对象进行销毁

var msg = "hello";
msg = msg.substring(1,3);

var obj = new String("hello");
// 截取字符串:含头不含尾
msg = obj.substring(1,3);
obj = null;
复制代码

Number

JavaScript中的数值类型只有Number一种,双精度浮点数采用64位表示,所以一个Number类型的数字占8个字节。

双精度浮点数进行运算时可能会导致精度丢失,参见:

数值转换的三个方法:

Number()
可以转换任意类型,在操作符中也会进行调用:
(1)如果是Boolean值,truefalse将分别转换为10。 
(2)如果是数字值,只是简单的传入和返回。 
(3)如果是null值,返回0。 
(4)如果是undefined,返回NaN。 
(5)如果是字符串,遵循下列规则: 
        如果字符串截去开头和结尾的空白字符后,不是纯数字字符串,那么最终返回结果为NaN。 
        如果是字符串中只包含数字(包括前面带正号或负号的情况),则将其转换为十进制数值,即“1”变成1,“123”会变成123,而“011”会			  变成11(前导的零被忽略了); 
        如果字符串中包含有效的浮点格式,如“1.1”,则将其转换为对应的浮点数值(同样也会忽略前导零); 
        如果字符串中包含有效的十六进制格式,例如”0xf”,则将其他转换为相同大小的十进制整数值; 
        如果字符串是空的(不包含任何字符),则将其转换为0; 
        如果字符串中包含除上述格式之外的字符,则将其他转换成NaN. 
(6)如果是对象,则调用对象的valueOf()方法,然后依照前面的规则转换返回的值。如果转换的结果是NaN,则调用的对象的toString()方法,然后再次依照前面的规则转换返回的字符串值。

parseInt()
 不仅可以解析纯数字字符串,也可以解析以数字开头的部分数字字符串(非数字部分字符串在转换过程中会被去除)。 
(1)如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN; 也就是说,用parseInt()转换空字符串会返回NaN。 
(2)如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符。 
(3)如果字符串以”0x”开头且后跟数字字符,就会将其当作一个十六进制整数。 
(4)如果字符串以”0”开头且后跟数字字符,就会将其当作一个八进制整数。 
(5parseInt()函数增加了第二参数用于指定转换时使用的基数(即多少进制)。 
(6parseInt()函数所解析的是浮点数字符串时,取整操作所使用的方法为“向下取整”。

parseFloat()
 与parseInt()一样,parseFloat()也可以解析以数字开头的部分数字字符串(非数字部分字符串在转换过程中会被去除)。与parseInt()不同  的是,parseFloat()可以将字符串转换成浮点数;但同时,parseFloat()只接受一个参数,且仅能处理10进制字符串。 
(1)字符串中的第一个小数点是有效的,而第二个小数点就是无效的了,因此它后面的字符串将被忽略。 
(2)如果字符串包含的是一个可解析为整数的数(没有小数点,或者小数点后面都是零),parseFloat()会返回整数。
复制代码

Boolean

布尔类型的变量往往会在操作过程中产生,存在于以下三种操作符:

1.关系操作符(> < <= >=)

数值的比较不用多说,此处重点分析非数值情况:

  • 如果两个操作数都是字符串,则逐个比较两者对应的字符编码(charCode),直到分出大小为止 。
  • 如果操作数是其他基本类型,则调用Number() 将其转化为数值,然后进行比较。
  • NaN 与任何值比较,均返回 false 。
  • 如果操作数是对象,则调用对象的 valueOf 方法(如果没有 valueOf ,就调用 toString 方法),最后用得到的结果,根据前面的规则执行比较。

2.相等操作符(== != === !==)

== 和 != 操作符都会先转换操作数,然后再比较它们的相等性:

  • 如果有一个操作数是布尔值,则在比较相等性之前,先调用 Number() 将其转换为数值;
  • 如果一个操作数是字符串,另一个操作数是数值,在比较相等性之前,先调用 Number() 将字符串转换为数值;
  • 如果一个操作数是对象,另一个操作数不是,则调用对象的 valueOf() 方法,用得到的基本类型值按照前面的规则进行比较;
  • null 和 undefined 是相等的。在比较相等性之前,不能将 null 和 undefined 转换成其他任何值。
  • 如果有一个操作数是 NaN,则相等操作符返回 false,而不相等操作符返回 true;
  • 如果两个操作数都是对象,则比较它们的指针地址。如果都指向同一个对象,则相等操作符返回 true;否则,返回 false。

=== 和 !== 操作符最大的特点是,在比较之前不转换操作数 。它们的操作规则如下:

  • ===: 类型相同,并且值相等,才返回 true ,否则返回 false 。
  • !== : 类型不同,或者值不相等,就返回 true,否则返回 false 。

3.布尔操作符(!)

常用于将一个变量转换成Boolean类型:

console.log(!!0) //false
复制代码

Symbol

Symbol 的目的就是为了创建一个独一无二的值,我不需要关心值的内容,我只需要确定它不会重复。。和其他基本类型不同的,Symbol 没有对应的包装类型,也就是说 Symbol 本身不是对象,而是一个函数。

 var s1 = Symbol();
复制代码

注意,Symbol 函数的参数只是表示对当前 Symbol 值的描述,因此,相同参数的 Symbol 函数的返回值也是不相等的。 

Undefined

已经声明还未赋值的变量,一个变量创建出来最原始的状态。

Null

一个对象被人为的重置为空对象,而非一个变量最原始的状态 。 如果需要释放某个对象,就将变量设置为 null,即表示该对象已经被清空,目前无效状态。

类型判断

typeof 是一个操作符,其右侧跟表达式并返回它的数据类型,返回的结果用该类型的字符串(全小写字母)形式表示,包括以下 7 种:number、boolean、symbol、string、object、undefined、function。

值得注意的是,使用typeof判断null会返回object。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享