笔记-JS高级程序设计-基本概念篇

1:JS中的一切(变量,函数名和操作符)都是区分大小写

2:标识符(变量,函数,属性的名字,以及函数的参数),第一个字符必须是字母,下划线,或者美元$,书写方式采用驼峰式不能将关键字作为标识符

3:JS的变量是松散类型,每个变量仅仅是一个用于保存值的占位符未初始化的变量都会保存一个特殊值--undefined

4:JS的五种基本数据类型(Undefined,Null,Boolean,Number,String),复杂数据类型--Object(本质是一组无序的键值对组成)。从技术上讲,函数在JS当中属于对象,但是他不应该是一种数据类型。所以通过typeof操作符(不是函数)来区分很有必要。

  注释:2018-7-30 10:18:50 begin

  4.1:JS的五种基本数据类型都属于原始值,原始值是不可更改的:任何方法都无法更改(或“突变”)一个原始值

  4.2:基本类型的值是存放在栈当中(栈(stack)为自动分配的内存空间,它由系统自动释放;而堆(heap)则是动态分配的内存,大小不定也不会自动释放),存放在栈内存中的简单数据段,数据大小确定,是直接按值存放的

var str = "abc";
console.log(str[1]="f");    // f
console.log(str);           // abc

let name = "pan";
name = "panrui"; //实际上并不是修改字符串"pan"的值,而是创建了一个新的字符串,然后将新的字符串赋值给变量,在销毁原来的字符串

  4.3:最佳的方式也是采用typeof来检测原始值的类型

    4.3.1:typeof运算符的独特之处在于,将其用于一个未声明的变量也不会报错。未定义的变量和值为undefined的变量通过typeof都将返回"undefined",所以显式地初始化变量很有必要。Undefined类型只有一个特殊值--undefined,比如说声明了但是没有初始化的变量。

    4.3.2:Null类型只有一个值--null,null表示一个空指针对象,如果定义的变量将来准备保存对象,那么初始化为null,这样直接检查null就可以知道相应的变量是否已经保存了一个对象的引用。undefined是派生与null,所以undefined == null 为true。杜绝使用typeof来检测null类型的值

  4.4:引用类型(object)的值是存放在堆内存中的,但是变量还是存放在栈当中,不过变量在栈当中所对应的值是一个地址,存放引用类型的值的地址。

  end

7:Boolean只有true和false两个值。JS所有类型的值都有与这两个Boolean值等价的值,将一个值转换为对应的Boolean采用Boolean()函数就可以转换为false的其他值为(空字符串“”,0和NaN,null,undefined)

8:Number

  1浮点数值:Number类型来表示整数和浮点数值。八进制字面值(在严格模式中无效)的第一位必须为0(070解析为八进制的56),如果字面值中的数值超过范围,那么前导零会被忽略(079解析为79),浮点数的精度为17位小数,所以(0.1+0.2 不等于0.3)永远不要测试某个特定的浮点数值,科学计数法(3.125e7=3125000),(0.0000003 =3e-7)。

  2数值范围:超过范围的值会被自动转为Infinity(也分正负),Infinity是不能参与计算的要想确定一个数值是否超出范围采用isFinite()函数(返回true或者false)。

  3NaN:非数值也是一个特殊的数值。这个数值表示一个要返回数值的操作数未返回数值的情况(这样就不会报错了,比如任何值除以0都会报错)。NaN有两个非常特点,任何涉及NaN的操作都会返回NaN,NaN与任何值都不会相等(包括他自己)。isNaN()检测某个值是否可以转换为数值,不能转换的话就返回true,也就表示这个参数"不是数值"。

  4数值转换:把非数值转换为数值:Number(),parseInt(),parseFloat()。

    Number适用于任何数据类型,后面两个则专门将字符串转换成数值。Number的转换规则太复杂了(自己去看书),

    parseInt主要是看字符串是否符合数值模式,忽略空格直接找到第一个非空格字符,如果第一个字符串不是数字字符或者负号,那么就直接返回NaN,如果是数字字符或者负号,就继续解析直到遇到了一个非数字字符(小数点不是数字字符)识别各种整数格式。使用的时候最好指定基数(即多少进制)。

    parseFloat解析的字符串中的第一个小数点是有效的,第二个区别在于他会始终忽略前导的零,并且只解析十进制数但十六进制格式的字符串则始终会被转换为0

9:String

  1字符串的特点:字符串一旦创建,它们的值就不能再改变,要改变某个变量保存的字符串,首先要销毁原来的字符串,然后再用一个新的字符串重新填充该变量

  2转换为字符串:第一种是使用几乎每个值都有的toString(),这个方法唯一要做的就是返回相应值的字符串表现。但是null和undefined没有这个方法。在不知道要转换的值是不是null和undefined的情况下,可以使用转型函数String(),规则就是如果值有toString方法,则调用该方法,如果值是null就返回"null",undefined同理。要把某个值转换为字符串的快捷方式,使用加号操作符,把它与一个空字符串加在一起。

 

11操作符

  1递增与递减操作符(分为前置操作符与后置操作符),这四个操作符对任何值都适用,只不过会先转换成数字值在进行操作,Number()

12函数

  1位于return语句之后的任何代码都永远不会执行,return语句可以不带有任何返回值,会返回一个undefined。

  2理解参数:JS函数的参数在内部是用一个类数组arguments对象来接收的,使用length属性来确定传递进来的参数的个数,关于arguments对象的特点就是,他的值永远与对应命名参数的值保持同步(但是他们的内存空间是相互独立的),另外注意的一点是arguments对象的长度是由传入的参数个数决定,而不是定义函数时命名参数的个数决定。

  3关于参数最后一点,没有传递值的命名参数都将自动被赋予undefined,且JS所有参数都是按值传递,不可能通过引用传递参数。

13语句

  1if语句的condition会自动结果转换为布尔值

  2do-while属于一种后测试循环语句,在对条件表达式求值之前,循环体内的代码至少会被执行一次

  3while前循环语句,for也是前循环语句,for循环只是把与循环有关的代码集中到了一个位置

  4for-in是一种精准的迭代语句,用来枚举对象的属性,for-in循环输出的属性名的顺序是不可测的,另外注意一点就是,循环之前最好判断要迭代的对象的变量值不为null或undefined

  5break语句会立即退出循环,contiune语句虽然也会立即退出循环,但退出循环以后会从循环的顶部继续执行

  6switch语句中可以使用任何数据类型,其次case的值也不一定是常量,可以是变量,甚至是表达式。switch在比较值的时候采用的全等操作符

posted @ 2018-03-19 21:47  初心不负  阅读(180)  评论(0编辑  收藏  举报