Javascript编程基础1
1.简单值和复杂值的区别
简单数据类型所创建的值被称之为简单值,而复杂数据 类型所创建的值被称之为复杂值。
那么简单值和复杂值具体有什么区别呢?
1.简单值(或原始值)
简单值是表示JS中可用的数据或信息的最底层形式或最简单形式。简单类型的值被称为简单值, 是因为它们是不可细化的。
也就是说,数字是数字,字符是字符,布尔值是true或false, null和undefined就是null和 undefined。
2.复杂值
在JavaScript中,对象就是一个复杂值。因为对象可以向下拆分,拆分成多个简单值或者复杂 值。复杂值在内存中的大小是未知的,因为复杂值可以包含任何值,而不是一个特定的已知值。 所以复杂值的数据都是存储于堆区里面。
3.访问方式
按值访问
简单值是作为不可细化的值进行存储和使用的,引用它们会转移其值
引用访问
复杂值是通过引用进行存储和操作的,而不是实际的值。创建一个包含复杂对象的变量时,其值 是内存中的一个引用地址。引用一个复杂对象时,使用它的名称(即变量或对象属性)通过内存中 的引用地址获取该对象值
4.比较方式
简单值采用值比较,而复杂值采用引用比较。复杂值只有在引用相同的对象(即有相同的地址)时 才相等。即使是包含相同对象的两个变量也彼此不相等,因为它们并不指向同一个对象
5.动态属性
对于复杂值,可以为其添加属性和方法,也可以改变和删除其属性和方法;但简单值不可以添加 属性和方法
6.变量赋值
最后说一下关于变量的赋值,其实是可以分为直接赋值和引用赋值的。直接赋值,就是指将简单 值赋值给变量,而引用赋值是指将一个复杂值的引用赋值给变量,这个引用指向堆区实际存在的 数据。
直接赋值
let a = 3;
let b = a;
b = 5;
console.log(a);//3
引用赋值
let a = {value : 1};
let b = a;
b.value = 10;
console.log(a.value);//10
2类型转换
通过前面的介绍,我们已经知道了在JavaScript中有好几种不同的数据类型。然而这些数据类型 都是可以相互转换的。类型转换可以分为两种,隐性转换和强制转换。
1.隐性转换
当不同数据类型进行相互运算的时候,
当对非布尔类型的数据求布尔值的时候
预期为数字的时候:
算术运算的时候,我们的结果和运算的数都是数字,数据会转换为数字进行计算(-* / %)
2.强制转换
转换为数值 number() , parseInt() , parseFloat()转换函数
小技巧:
・转换字符串:a=""+数据
-转换布尔:!数据类型
-转换数值:数据类型*或/I
运算符
1算数运算符
常见的算数运算符有加减乘除和取模运算。主要需要注意的就是,在动态语言中做除法运算时, 能够得到小数。下面是关于算数运算符的示例:
2 一元运算符
所谓一元运算符,就是指只作用于一个操作数的运算符。常见的一元运算符有两种,赋值运算符 和递增递减运算符。
- 赋值运算符
关于赋值运算符,前面我们已经见到过了。最常见的就是=,代表将右边的内容赋值给左边。除 此之外,还有+=、-=、*=等一系列赋值运算符,具体的示例如下:
let a = 5;
a += 5;
console.log(a); // 10
a -= 3;
console.log(a); // 7
a *= 5;
console.log(a); // 35
a /= 5;
console.log(a); // 7
a %= 2;
console.log(a); // 1
2.递增和递减
除了上面所介绍的赋值运算符以外,常见的一元运算符还有递增和递减。在递增递减中,主要需 要注意前置和后置的区别。如果是前置,那么是先自增或自减,然后参与运算。如果是后置,则 是先参与运算,然后再自增或者自减,示例如下:
前置示例:
let a = 2;
let b = 10;
let c = 一a + b;
let d = a + b;
console.log(a,b,c,d);//1 10 11 11
后置示例:
let a = 2;
let b = 10;
let c = a一 + b;
let d = a + b;
console.log(a,b,c,d);//1 10 12 11
需要注意的是,我们的自增自减操作符不仅仅局限于数值,其他类型也可以,遵循下面的规则:
・在应用于一个包含有效数字字符的字符串时,现将其转换为数字值,再执行加减1操作。字 符串变量变为了数值变量。
-在应用于一个不包含有效数字字符的字符串时,将变量的值设置为NaN,字符串变量变成数 值变量。
-遇布尔值false时,先将其转换为0再执行加减1操作,布尔值变量变成数值变量。
-遇布尔值true时,先将其转换为1再执行加减1操作,布尔值变量变成数值变量。
・在应用浮点数数值时,执行加减1操作。
示例:
let si = "123";
let s2 = "123Hello";
let s3 = "Hello";
let s4 = true;
let s5 = 3.14;
console.log(一s1);//122 console.log(一s2);//NaN console.log(一s3);//NaN console.log(一s4);//0 console.log(一s5);//2.14
3比较运算符
1.关系运算符
小于,大于,小于等于,大于等于
- 相等和不相等
==表示相等,!=表示不相等,数据类型不同的数据进行相等比较的话会自动转换数据类型, 还有一些其他的转换规则如下:
• null和undefined是相等的
•如果有一^操作数是NaN,则返回false, NaN和NaN比较也是false
-如果是数字的字符串和数字进行比较,会先将字符串转换为数字
•布尔值里面true转换为1, false转换为0
- 全等和不全等
全等是===,不全等是!==这个就是必须数据类型和数值都相等
4逻辑运算符
- 非!
所谓非,就是取反,非真即假,非假即真
- 与&&
作用于两到多个值,并且只有所有的操作数都是真值时,才为true
3.或‖
同样是作用于两到多个值,但是只要有一个操作数为真,就返回真
6运算符优先级
JavaScript中的运算符优先级是一套规则。该规则在计算表达式时控制运算符执行的顺序。具有 较高优先级的运算符先于较低优先级的运算符执行。
例如,乘法的执行先于加法。
下表按从最高到最低的优先级列出JavaScript运算符。具有相同优先级的运算符按从左至右的顺 序求值。
运算符描述
.[]() |
字段访问,数组下标,函数调用以及表达 式分组 |
++ 一 - ~ ! delete new void |
typeof —元运算符,返回类型,对象创建,未定 义值 |
* / % |
乘法,除法,取模 |
+ - + |
加法,减法,字符串拼接 |
<< >> >>> |
移位 |
< <=> >=instanceof |
小于,小于等于,大于,大于等于,instan ceof |
== 1= === |== |
等于,不等于,全等,不全等 |
& |
按位与 |
| |
按位异或 按位或 |
&& |
逻辑与 |
|| |
逻辑或 |
?: |
三目运算符 |
= |
赋值 |
|
多重赋值 |
- 拥有良好注释的代码是专业程序员的标志。如果没有注释,往往在几周后自己也很难明白自 己写的代码的含义。
- 在JavaScript中,每一条代码以分号结束。
- 标识符就是我们自己给变量。函数或者对象起的一个名字。定义标识符时需要遵循一定的硬 性要求和软性要求。
- 常见的命名法则有匈牙利命名法,驼峰命名法和蛇形命名法。
- 在JavaScript中存在一组关键字和保留字,不能用作自定义标识符。
- 在JavaScript中数据类型整体上可以分为简单数据类型和复杂数据类型。
- 使用typeof运算符可以查看一个数据的数据类型。
- 在JavaScript中声明变量可以使用let, const和var关键字来进行声明。
- 简单值和复杂值在访问方式,比较方式以及内存中存储空间的区别。
- 使用var关键字声明变量存在一些特殊的特性,例如重复声明以及遗漏声明
- 所谓作用域就是指变量在程序中能够被访问到的区域。常见的有全局作用域和局部作用域。
- JavaScript中存在6种基本数据类型,分别为undefined, null, boolean, number, string和 symbol o
- 每种数据类型都有其对应的属性和方法。掌握这些属性和方法可以让我们在编写代码时事半 功倍。
- 不同的数据类型之间可以相互进行转换,其中分为隐性转换和强制转换
- JavaScript中有众多的运算符,例如最常用的算数运算符,还有比较运算符,逻辑运算符, 和位运算符等。不同的运算符之间有一套优先级关系。
第3章流程控制语句
所谓流程控制,主要就是用于控制整个程序的走向的。默认情况下,程序是从上往下,逐条执行,这种情况我们将其称之为顺序结构。但是并不是所有的程序都是使用顺序结构就能够完成的。在我们书写程序时往往还需要对整个程序进行分之,或者对某段代码进行重复执行。
条件语句
单分支语句 :由一个if组成,如果条件成立,则进入代码块开始执行语句,如果条件不是一个布尔值,那么会被自动转换为布尔值
If(条件){
输出代码;
}
多分支语句 :有两个分支线,如果i条件不成立,那么就会跳入到else语句里面,
if(条件){
执行代码
}
Else{
执行代码
}
三目运算符:if...else语句的一个缩写方式,就是使用三目运算符
条件?(条件为真是执行的代码):(条件为假的时候执行的代码)
逻辑决策树
If(条件){
执行语句
}
Else if(条件){
执行语句
}
Else if(条件){
执行语句
}
Switch语句
Switch(条件){
Case 1:执行语句;
Break;
Case 2:执行语句;
Break;
Case 3:执行语句;
Break;
Case 4:执行语句;
Break;
}