第一周(二)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_25354709/article/details/88084282

十三、number数据类型的详细解读

3、parseInt()

也是把其他数据类型的值转换为number,和Number方法在处理字符串的时候有所区别

Number('12px')      // NaN
parseInt('12px')    // 12
parseInt('12px13')   // 12。提取规则:从左到右依次查找有效数字字符,直到遇见非有效数字字符为止(不管后面是否还有,都不找了),把找到的转换为数字
parseInt('px12')      // NaN
parseInt('12.5px')    // 12。 parseInt识别不了小数点。 只有parseFloat才能识别小数点。

4、parseFloat()

在parseInt的基础上可以识别小数点

parseInt('12.5px')           // 12
parseFloat('12.5px')         // 12.5
parseFloat('width:12.5px')   // NaN

课后思考:parseInt常用的只需要传递一个值做参数即可,但是它支持多个参数,回去后扩展其他参数的意思。
比如:parseInt(‘12.5’, 10)

十四、null 和 undefined的区别

null的意思是:空,没有
undefined的意思是:未定义,没有
“”:空字符串,没有
0:也可以理解为没有

1、空字符串和null的区别

空字符串相对于null来说开辟了内存,消耗了那么一丢丢的性能。

2、null和undefined的区别

null一般都是暂时没有,预期中以后会有的。(可能以后也没有达到预期),在JS中null一般都是手动先赋值为null,后期我们给其赋具体值。
undefined:完全没在预料之内的。

十五、对象数据类型的基础知识

1、对象数据类型object

var obj = {name: ‘hello’, age: 8};
每一个对象都是由零到多组 属性名(key键):属性值(value值)组成的,或者说由多组键值对组成的,每一组键值对中间用逗号分隔。
属性: 就是描述这个对象特点特征的

对象的属性名是字符串或者数字格式的,存储的属性值可以是任何的数据类型。
对象名.属性名:忽略了属性名的单双引号
对象名[属性名]: 不能忽略单双引号

var obj = {name: 'hello', age: 8 , friend: ['xxx', 'xxx']};
// 获取某个属性名对应的属性值
obj.name       // "hello"
obj['name']    // "hello"

如果属性名是数字如何操作

var obj = {0: 100};
obj.0  这种语法不支持
obj[0] 或者 obj['0'] ,这两种都可以支持
obj.sex 是undefined, 如果操作的属性名在对象中不存在,
获取的结果是undefined

设置或者修改,一个对象的属性名是不能重复的(唯一性),如果之前存在就是修改属性值的操作,反之不存在就是新设置属性的操作。

obj.sex = '男';
obj['age'] = 9;

删除

假删除:让其属性值赋值为null,但是属性还在对象中
obj.sex = null;

真删除:把整个属性都在对象中暴力移除
delete obj.sex;

思考题:obj[age] 和 obj[‘age’] 有什么样的区别?

var obj = {name: 'hello', age:8 };
var age = 'world';
obj[age]
obj['age']

16、基本数据类型和引用数据类型的区别

JS是运行在浏览器中的(内核引擎),浏览器会为JS提供赖以生存的环境(提供给JS代码执行的环境),叫做全局作用域。 也是window。

node 和 Java的全局环境都是 global。

var a = 12;
var b = a;            // 把a变量存储的值赋值给b
b = 13;               // 给b这个变量,重新赋值13
console.log(a);       // 12

var n = {name: 'hello'};
var m = n;             // 把n存储的值赋值给m
m.name = 'world';
console.log(n.name);   // world

基本数据类型是按值操作的:基本数据类型在赋值的时候,是直接的把值赋值给变量即可。

引用数据类型是按照空间地址(引用地址)来操作的
var n = {name: ‘hello’};
1、先创建一个变量n
2、浏览器首先会开辟一个新的存储空间(内存空间),目的是把对象中需要存储的内容(键值对)分别的存储在这个空间中。为了方便后期找到这个空间,浏览器给空间设定了一个地址(16进制的)。
3、把空间的地址赋值给了变量。
所以才叫做引用数据类型,就是因为引用了空间的地址

关于引用数据类型的图:
引用数据类型

17、函数的初步讲解

1、函数数据类型

函数数据类型也是引用数据类型的一种,也是按照引用地址来操作的。

函数:具备一定功能的方法

JS中怎么创建函数:

创建函数:相当于生产了一台洗衣机
function 函数名() {
	// 函数体:实现某一个功能的具体JS代码
}

执行函数:相当于使用洗衣机洗衣服(如果函数只创建了但是没有去执行,函数没有任何的意义)
函数名();

举个例子:

function fn() {
	console.log(1+1);
}
不加小括号,输出的是这个函数本身
fn;   => 输出函数本身
输出结果:
f fn() {   // 谷歌浏览器前面的小f, 就代表function
	console.log(1+1);
}
加了小括号,就是执行。(把函数体中实现功能的代码执行)
fn();     // 2

函数
2、函数数据类型是怎么操作的

不管是用function还是用var声明的变量名,如果在全局作用域下,变量名一样,就冲突了。
函数只创建,不执行,没有意义。

关于函数数据类型的图:
函数数据类型

形参:叫形式参数(它是个变量),函数的入口
当我们创建一个函数想要实现某个功能的时候,发现有一些材料并不清楚,
只有当函数运行的时候,别人传递给我,我才知道,此时我们就需要设定入口。
让用户执行的时候,通过入口把值给我们。
function fn(num1, num2) { // num1和num2,都是形参变量
	console.log(num1 + num2);
}
实参: 函数执行传递给函数的具体值就是实参
fn(1, 1);   // 2

18、if、else if、else判断语句

1、if、else if、else

if (条件1) {
	// 条件1成立执行的操作
} else if (条件2) {
	// 上面条件不成立,条件2成立,执行的操作
}
...
else {
	// 以上条件都不成立执行的操作
}

如果好几个条件都成立了,只把第一个成立的条件执行,后面成立的条件忽略不管。
条件的写法:
A == B,  结果是 truefalse    
A != B
A >= B
A < B
如果条件里面只有一个固定值,它是先把A转换为布尔类型,然后判断真假,
以此来决定条件是否成立
if (A) {}
只有两个小条件都是真,整体条件才为真
if (A > B && A < 10) {}
只要其中一个小条件成立,整体条件就是真
if (A > B || A == 0) {}

BAT面试题:

parseFloat 和 parseInt一样,从字符串的左边开始,
从左边的第一个字符开始找,把有效数字符找出来,直到遇到非有效数字符,
第一个w不是有效数字符,开门遇到山,就不往后面找了。
所以,结果是NaN
var num = parsetFloat('width:12.5px');    // NaN
if (num == 12.5) {  // false。 NaN肯定不等于12.5
	alert(12.5);
} else if (num == NaN) { // false。 NaN是不等于NaN的, NaN != NaN。 NaN和谁都不相等。
	alert(NaN);
} else if (typeof num == 'number') {  // true。typeof NaN 的结果是 "number"
	alert(0);      // 用alert输出的是 '0', 用alert输出的是都是字符串
} else {
	alert('啥也不是!');
}
结果是: 字符串0

计算符(运算符)的优先级高于比较符

先把左边1+1计算完成,再和右边进行对比
1+1==2      // 输出: true

19、三元运算符

条件 ? 条件成立执行 :条件不成立执行;

if(条件) {} else {}:三元运算符就是这种简单if、else的另外一种写法

var num = 10;
if (num > 5 && num <= 10) {
	num++;
} else {
	num--;
}

num++:在自身基础上加1
num--:在自身基础上减1

改写成为三元运算符
num > 5 && num <= 10 ? num++ : num--;

如果只有条件成立时执行:

有一种情况是不需要进行处理的时候,
我们使用null、undefined、void 0(就是undefined)来占位
num > 5 && num <= 10 ? num++ : null;

某一种情况执行多条操作,使用小括号包起来,中间用逗号分隔

num > 5 && num <= 10 ? (num++, console.log(num)) : null;

在三元运算符的操作中不能出现break、continue、return这些关键词,
如果if、else中出现了这些关键词,无法用三元运算符来代替if、else

var num = 10;
if (num > 5 && num <= 10) {
	num++;
	break; 或者 continue; 或者 return;
}
三元运算符嵌套三元运算符
var num = 10;
num > 0 ? (num < 10 ? num++:num--) : (num >- 10 ? num+=2:num-=2);

改写成ifelse
if (num > 0) {
	if(num<10){
		num++;
	}else{
		num--;
	}
}else {
	...
}

20、switch case判断

switch case应用于if、else中一个变量在不同值情况下的不同操作

var num = 10;
switch(num) { // switch后面小括号中存放的是一个值(一般我们都写变量,意思是把变量存储的值拿过来用,有时候也可能是一个计算)
	case 1:
		console.log('1');
		break;
	case 10: // case后面放入的都是值,目的是验证switch后面的值和哪一种case后面的值相等,相等的进行对应的处理
		console.log('2');
		break;  // 每一种case结束后都要加break, 结束当前的判断
	default:  // switch后面的值和每一种case情况对应的值都不相等,执行最后的defualt,类似于else
		console.log('end');
}

num%2:让num存储的值除以2取余数(0或者1)

var num = 5;
switch (num % 2) { // 先把取余操作进行运算,拿运算结果和case比较
	case 0:
		num++;
		break;
	case 2-1:  // case后面也应该是值,此处先把2-1计算,把计算的结果和switch值比较
		num--;
		// 最后一项可以不加break, 不加也能跳出判断
}

如果不加break,不管后面的条件是否成立,都会继续向下执行,直到遇到break为止。

小应用:把符合某几项值都去做同一件事情,使用不加break实现

switch (num % 3) {
	case 0:
	case 1:  // 余数是0或1都执行减减的操作
		num--;
		break;
	default:
		num=0;
}

‘6’ == 6 , 是true
‘6’ === 6, 是false
而switch case中的比较,使用的是: ===

var num = '6';
switch (num) {
	case 6:  // false。因为switch case中的比较用的是===
		num--;
		break;
	default:
		num=0;
}
结果: 0

=:赋值,等号左边是变量,右边是值
==:比较,如果左右两边值的类型不一样,浏览器会默认转换为一样的然后再进行比较
例如: ‘6’ == 6,浏览器将 ‘6’ 转换为6,然后再进行比较
===:绝对相等,不仅要求值一样,并且类型也要完全一样。
所以, ‘6’ === 6,结果是false

猜你喜欢

转载自blog.csdn.net/qq_25354709/article/details/88084282