JavaScript学习笔记—— 3. JavaScript基本概念

1.     ECMAScript中的一切(变量、函数名和操作符)都区分大小写。

2.     标识符:指变量、函数、属性的名字,或者函数的参数。

  • 第一个字符必须是一个字母、一个下划线( _ )或者一个美元符号($);
  • 其他字符可以使字母、下划线、美元符号或者数字。
  • 按照惯例,ECMAScript标识符采用驼峰大小写格式。

3.     严格模式:*use strict*,可以在脚本中启用严格模式,写在代码顶部。

4.     ECMAScript中的语句采用一个分号作为结尾。虽然并不必需,但是可以用来避免错误(不完整输入etc),某些情况下可以增加代码的性能(解析器不需要推测哪里需要分号)。

5.     变量:ECMAScript中的变量是松散型的,即可以用来保存任何类型的数据——每个变量仅仅是一个用于保存值的占位符而已。

  • var 变量名;
  • 省略var操作符可以定义全局变量,但是并不推荐。因为在局部作用域中定义的全局变量难以维护,而且如果有意的忽略了var操作符,也会由于变量不会马上就有定义(definition)而导致不必要的混乱。给未经声明的变量赋值在严格模式下会导致抛出ReferenceError错误。

6.     数据类型:ECMAScript中有5种简单数据类型(基本数据类型):Undefined, Null, Boolean, Number, String以及一种复杂数据类型Object。

  • typeof操作符用于检测给定变量的数据类型
  • typeof null会返回object,因为特殊值null被认为是一个空的对象引用

7.     undefined类型只有一个值,即特殊的undefined。这个值是由ECMA-262第三版引入的,用于区分空对象指针和未经初始化的变量。但是,包含undefined值的变量与尚未定义的变量并不一样。

  • var message;表示“定义了一个变量,名为message,但是未初始化”,使用alert(message)会显示message变量的值,为“undefined”;
  • 如果没有“var message”,则表示所谓的message变量并没有被定义,即message变量本质上并不存在,使用alert(message);会产生错误。
  • 但是对于未初始化的变量执行typeof操作符会返回undefined值,对于未声明(未定义)的变量执行typeof操作符同样会返回undefined值。
  • 所以,即便未初始化的变量会被自动赋予undefined值,但是显式地初始化变量仍然值得推荐,因为typeof操作符对这个变量进行操作的时候,我们就可以立即知道被检测的变量还没有被声明,而不是没有被初始化(例子:应该使用var message = “example”)。
  • 注意“初始化”和“被声明”两者的区别。

8.     null类型也只有一个值,即特殊的null。从逻辑角度来看,null值表示一个空对象指针,所以typeof null会返回“object”。

  • 如果定义的变量准备在将来用于保存对象,那么最好将该变量初始化为null而非其他值,以方便检查null值就可以知道该变量是否保存了一个对象的引用(if (car != null))

9.     ECMAScript中所有类型的值都有与boolean值等价的值,即

var message = “Hello”; var messageAsBoolean = Boolean(message);    message字符串被转换成了一个Boolean值,被保存于messageAsBoolean中。

10.  浮点数值的最高精度是17位小数,但是在进行算数计算时其精确度远远不如整数,所以不要做if (a + b == 0.3)类似的操作。永远不要测试某个特定的浮点数值。

11.  NaN(Not a Number)用来表示一个本来要返回数值的操作数未返回数值的情况。在ECMAScript中,任何数值除以0都会返回NaN,因此不会影响其他代码的执行。

  • 任何涉及NaN的操作都会返回NaN
  • NaN和任何值都不相等,包括NaN本身。
  • isNaN()函数,可以接受一个参数,该参数可以使任何类型,而该函数可以用来帮助确定这个参数是否“不是数值”。

12.  有3个函数可以把非数值转换为数值:Number()、parseInt()和parseFloat()。第一个用于任何数据类型,后两者专门用于把字符串转换为数值。

13.  parseInt()函数在处理字符串时,会忽略字符串前面的空格,直至找到第一个非空格字符,如果第一个字符不是数字字符或者负号,parseInt()返回NaN;如果第一个字符是数字字符,parseInt()会继续解析第二个字符,直到解析完所有后续字符或者遇到了一个非数字字符;小数点并非一个有效的数字字符。常会给parseInt函数提供第二个参数作为转换时使用的基数(即多少进制):var num = parseInt(“AF”, 16); 。为了避免解析错误,建议无论什么情况下都明确指定基数,所以始终将10作为第二个参数是必要的,当常用十进制数值时。

14.  String()函数:

  • 如果值有toString()方法,则调用该方法(没有参数)并返回相应的结果;
  • 如果值是null,则返回“null”;
  • 如果值是undefined,则返回“undefined”

15.  在ECMAScript中,Object类型是所有它的实例的基础,即Object类型所具有的任何属性和方法也同样存在于更具体的对象中。Object的每个实例都具有下列属性和方法:

  • Constructor:保存着用于创建当前对象的函数。
  • hasOwnProperty(propertyName):用于检查给定的属性在当前对象实例中(而非实例的原型中)是否存在。其中propertyName必须以字符串形式指定(o.hasOwnProperty("name”));
  • isPrototypeOf(object):用于检查传入的对象是否是另一个对象的原型;
  • propertyIsEnumberable(propertyName):用于检查给定的属性是否能够使用for-in语句来枚举,属性名必须以字符串形式指定;
  • toLocaleString():返回对象的字符串表示,该字符串与执行环境的地区对应;
  • toString():返回对象的字符串表示;
  • valueOf():返回对象的字符串、数值或者布尔值表示。

16.  一元递增和递减操作符规则:

  • 在应用于一个包含有效数字字符的字符串时,现将其转换为数值,再执行加减1的操作— 字符串变量变成数值变量;
  • 在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN— 字符串变量变成数值变量;
  • 在应用于布尔值false时,现将其转换为0再执行加减1的操作— 布尔值变量变成数值变量;
  • 在应用于布尔值true时,现将其转换为1再执行加减1的操作— 布尔值变量变成数值变量;
  • 在应用于浮点数值时,执行加减1的操作;
  • 在应用于对象时,先调用对象的valueOf()方法以取得一个可供操作的值,然后对该值应用前述规则。如果结果是NaN,则在调用toString()方法后再应用前述规则— 对象变量变成数值变量。

17.  一元加和减操作符:

  • 对非数值应用一元加操作符时,该操作符会像Number()转型函数一样对这个数值执行转换;
  • 对非数值应用一元减操作符时,遵循一元加操作符规则,最后将得到的数值转换为负数。

18.  按位非(NOT)

  • 按位非操作由一个波浪线(~)表示,执行结果是返回数值的反码:25(00000000000...1101)则~25(11111111...0010),最终结果与num1 = 25; -num1 - 1的结果相同,但是按位非在数值表示的最底层执行操作,所以速度更快。

19.  按位与(AND)

  • 按位与操作符由一个和号字符(&)表示,他有两个操作数。本质上就是讲两个数值的每一个位对齐,然后做出AND操作(两个1返回1,否则返回0)

20.  按位或(OR)

  • 由(|)表示,类似与AND,但是仅0和0返回0

21.  按位异或(XOR)

  • 由一个插入符号(^)表示,有两个操作数,如果是同1(两个1)或者同0(两个0),返回0,否则返回1

22.  左移

  • 由两个小于号(<<)表示,这个操作符会将指定数值的所有位向左移动指定位数:var oldValue = 2; var newValue = oldValue << 5 则会将10变为1000000.
  • 左移不会影响操作数的符号位,所以-2向左移动5位,会返回-64

23.  有符号的右移

  • 有符号的右移动操作符由两个大于号(>>)表示,将数值向右移动,但是保留符号位。

24.  无符号右移

  • 无符号右移由三个大于号(>>>)表示,这个操作符会将数值的所有32位都像右移动。对正数来说,与有符号右移相同。但是对于负数而言,由于无符号右移以0来填充空位,而非以符号位的值来填充空位,且无符号右移操作符会把负数的二进制码当做正数的二进制码,会导致无符号右移后的结果非常大

25.  逻辑非操作符可以用来将一个值转换为与之对应的布尔值,而同时用两个逻辑非操作符,时间上就会模拟Boolean()转型函数的行为,第一个逻辑非操作会基于无论什么操作数返回一个布尔值,而第二个逻辑非操作则对这个布尔值求反,即可得到这个值真正对应的布尔值。

26.  逻辑或的赋值: var myObject = preferredObject || backupObject;

  • 表示只有在preferredObject不包含有效值的情况下,给myObject赋予后备值

27.  ECMAScript中不含有块级作用域;

Not End Yet...

时间: 2024-10-04 22:51:03

JavaScript学习笔记—— 3. JavaScript基本概念的相关文章

JavaScript学习笔记四:基本概念(2)

1.对非数值应用一元加/减操作符时,该操作符会像Number()转型函数一样对这个值进行转换.例:var s = +"01"  //值变成数值1. 2.ECMAScript中的所有数值都以IEEE-754 64位格式存储,但操作符并不直接操作64位值,因此整个过程就像只存在32位的整数一样. 3.对于有符号的整数,32位中的前31位用于表示整数的值,第32位为符号位:0表示正数,1表示负数.其中,正数以纯二进制格式存储,负数以二进制格式的补码存储. 4.按位非(~):本质是操作数的负值

JavaScript学习笔记三:基本概念(1)

1. JS中的一切(变量.函数名.操作符等)都区分大小写.--true是boolean值,而True只是标识符. 2. JS语句以分号结尾,但不是必需的,原因: a. 结尾没有分号有时会导致压缩错误. b. 加上分号在某些情况下会为解析器提供方便,增进代码的性能. 3. 不同的ECMAScript版本对关键字和保留字的定义不同,但最好在JS代码中永远都不用任何关键字和保留字,以便与将来的ECMAScript版本兼容. 4. ECMAScript的变量是松散类型的,就是一个变量没有特定的类型限制,

JavaScript学习笔记(3)——JavaScript与HTML的组合方式

一.JavaScript可以写在HTML页面内部,通过<script>标签,如下面代码中的粗体部分: <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title></title> <script type="text/javascript"> console.log("hello World!"

JavaScript学习笔记(10)——JavaScript语法之操作DOM

1.页面输出用document.write()方法,但是不可以在window.onload中用,否则整个html页面将被覆盖. 2.通过javascript获取对象后,改变对象中的html内容:document.getElementById(id).innerHTML=new HTML. 3.改变对象的属性:document.getElementById(id).attribute=new value. 4.改变对象的css属性:document.getElementById(id).style

JavaScript学习笔记一 JavaScript是什么能干什么

一JavaScript是什么 JavaScript 是一种解释型的脚本语言,可以插入 HTML 页面,并由所浏览器解释执行. 二JavaScript能干什么 ①向HTML 添加新内容 document.write("<h1>This is a heading</h1>"); document.write("<p>This is a paragraph</p>"); 注意:在 HTML 输出过程中使用 document.

JavaScript学习笔记(6)——JavaScript语法之对象

JavaScript 中的所有事物都是对象:字符串.数字.数组.日期,等等. 在 JavaScript 中,对象是拥有属性和方法的数据. 属性是与对象相关的值. 方法是能够在对象上执行的动作. 提示:在面向对象的语言中,属性和方法常被称为对象的成员. 访问对象属性的语法是: objectName.propertyName 您可以通过下面的语法调用方法: objectName.methodName()

JavaScript学习笔记(5)——JavaScript语法之数据类型

JavaScript 拥有动态类型.这意味着相同的变量可用作不同的类型: var x // x 为 undefined var x = 6; // x 为数字 var x = "Bill"; // x 为字符串 1.字符串:字符串可以是引号中的任意文本.可以使用单引号或双引号. 2.数字:JavaScript 只有一种数字类型.数字可以带小数点,也可以不带.极大或极小的数字可以通过科学(指数)计数法来书写: var y=123e5; // 12300000 var z=123e-5;

JavaScript学习笔记(7)——JavaScript语法之函数

函数就是包裹在花括号中的代码块,前面使用了关键词 function: function functionname() { //这里是要执行的代码 } 当调用该函数时,会执行函数内的代码. 可以在某事件发生时直接调用函数(比如当用户点击按钮时),并且可由 JavaScript 在任何位置进行调用. 提示:JavaScript 对大小写敏感.关键词 function 必须是小写的,并且必须以与函数名称相同的大小写来调用函数. 在调用函数时,您可以向其传递值,这些值被称为参数. 这些参数可以在函数中使

JavaScript学习笔记(12)——JavaScript内置对象

1.Number Javascript只有一种数字类型,可以有小数也可以没有,也可以使用科学计数法. var y=123e5; // 12300000 var z=123e-5; // 0.00123 JavaScript 不是类型语言.与许多其他编程语言不同,JavaScript 不定义不同类型的数字,比如整数.短.长.浮点等等. JavaScript 中的所有数字都存储为根为 10 的 64 位(8 比特),浮点数. 如果前缀为 0,则 JavaScript 会把数值常量解释为八进制数,如果