0%

【JS】js学习小笔记 2#

你捡起了道具:遗失的纸片2# 一张普通的纸片,隐隐约约能够看到目录:“强制类型转换、运算符、语句、对象、函数、作用域”。边角还有被撕扯的痕迹,它们应该属于一个笔记本,但不知为什么被主人撕下来丢掉了。 提示:集齐所有纸片应该可以得到一本技能书。 👇点击下方按钮调查

7.强制类型转换

string:

  1. 直接调用被转换对象的toString()方法,该方法不会影响原值,会将转换后的结果返回。nullundefinedtoString()方法。
  2. 调用String()函数,并将被转换的变量作为参数传入,使用String()函数转换时,null→”null”,undefined→”undefined”。

Number:

  1. 使用Number()函数
?→数值 转换结果
字符串 非纯数字转换为NaN,空值/空格转换为0
布尔 true→1,false→0
null 0
undefined NaN

2.使用parseInt()/parseFloat()将字符串转换为整型/浮点型 该方法可去除字符串中非数字部分 原理:读到第一个非数字位,往后都忽略

“123px”→123 “123px456”→123”123.5”→123

如果对非String使用parseInt()/parseFloat(),会先转为String,再转为Number,如

true→”true”→NaN 123.5→”123.5”→123 所以parseInt()也有取整的作用

3.其他进制数字

进制 命名规定
Hex 0x??
Oct 0??
Bin 0B??

像“070”这种字符串有的浏览器会当成八进制解析

明确制定进制:parseInt(a,10)可向parseInt()传两个参数,第二个参数表示进制。

Boolean:

使用Boolean()参数:

?→Boolean 转换结果
数字 除了0和NaN,其他都是true
字符串 除了空串,其他都是true
对象 true
null/undefined false

unicode转换:

  1. JS:\\u+unicode(四位16进制编码)
  2. HTML:&#+unicode(十进制编码)

8.运算符

运算符 运算法则 隐式转换
+ ①NaN与任何数运算都得NaN②亦可字符串合并③任何值与字符串相加都转为字符串合并
-、*、/…… 任何值都转换为Number参与运算
+(正)、-(负) 非Number值先转为Number,再求正/反
!、\ \ 、&& 先转为布尔值,再进行逻辑运算,且返回原值,而不是bool变量
- 与:第一个为true,则必然返回第二个;第一个为false,则必然返回第一个(找false)
- 或:第一个为true,则必然返回第一个,第一个为false,则必然返回第二个(找true)
>/\\< ①非数值比较时将其转换为数值②任何值与NaN比较都是false③如果富豪两侧都是字符串,则不会 成数字而是转成相应的字符,使用unicode编码(一位一位比,两位一样就比下一位,直至比出 果)→比较字符串时一定要转型
\==/!= ①undefined衍生自null,所以相等②NaN不与任何值相等,包括它本身③判断是否为NaN:`isNaN( `函数
\=== 全等→不做类型转换,类型不同的直接返回false !== 不全等→不做类型转换,类型相同直接返回false

9.语句

自上向下执行,可用{}对其分组。 同一个{}称一组语句,要么都执行要么都不执行,一个{}称代码块,{}只有分组作用,不能隔离语句

流程控制

语句 语法 注释
条件 if(?){A}else{B} -
条件分支 switch(?){case 表达式:语句 break;……..default:语句} case后是全等判断
循环 while(条件表达式){语句}/for(初始化表达式;条件表达式;更新表达式){} 每次循环前先对条件表达式进行判断,若为true则进入循环体

10.对象

分类

  • 内建对象:由ES标准中定义的对象,在任何ES实现中都可使用(Math、String等)
  • 宿主对象:由JS运行环境提供的对象,目前来讲指浏览器提供的对象,如BOM、DOM
  • 自定义对象:开发者自己创建的对象

创建对象

方法一:声明后设置属性

step1.实例化对象:

1
var obj=new Object();

step2.在对象中添加属性&方法:

1
2
3
4
obj.name="张三";
obj.gender="男";
obj.age=18;
obj.fun=function(){};

step3.读取属性:

1
console.log(obj.name);

如果读取对象中未定义的属性,不会报错,返回undefined

方法二:声明时设置属性

1
2
3
4
5
6
var obj={
name:"张三",
gender:"男",
age:18,
fun:function(){}
}

使用该方法声明对象时属性名的引号可加可不加,但使用特殊名时必须加。 属性与值之间使用“:”链接,各属性用“,”连接,结尾属性不加“,”。

属性名/值

属性名:对象的属性名不强制使用命名规范,但若使用不符合命名规范的名称,调用属性时应使用对象[属性名]的方法,此处obj[name]=obj.name,但特殊命名无法使用点调用。中括号里也可以传入变量 属性值:可以是任意值,包括对象。

in运算符

检查一个对象中有无规定属性,如:

1
("test" in obj)

→检查obj对象中有无“test”属性

11.函数

函数也是一个对象

创建

方法一:声明函数对象(不常用)

step1.创建一个函数对象,可以将要封装的代码以字符串的形式传递给构造函数

1
var fun=new Function("console.log('Hello');");

step2.调用

1
fun();

方法二:使用函数声明创建函数

function 函数名([形参1,形参2….]) { 语句… }

1
2
3
4
function fun()
{
console.log('Hello');
}

方法三:使用函数表达式创建函数

var 函数名=function([形参1,形参2….]) { 语句… }

1
2
3
4
var fun=function()
{
console.log('Hello');
}

参数

函数不会检查参数的数量,未赋值的形参将初始化为undefined

返回值

使用return设置返回值,return后的语句不会执行。 return后不接任何值,或者没有return语句函数将返回undefined

执行匿名函数(立即执行)

1
2
3
(function(){
alert("我是匿名函数");
})();

第一个括号代表函数是一整个对象,后面括号将其执行→对象()

for…in语句

与for联用,与C#相似。 打印obj对象中所有的属性名与属性值:

1
2
3
4
5
6
7
function printObject()
{
for(var n in obj)
{
console.log(n+":"+obj[n]);
}
}

12.作用域

指一个变量的作用范围

在JS中,有两种作用域:①全局作用域②函数作用域

①全局作用域

创建方法:直接写在script标签下 生命周期:在页面打开时创建,页面关闭时销毁 调用方法:全局作用域中有个全局对象window可使用,其由浏览器创建。在全局作用域中创建的变量都会作为window的属性保存,创建的函数都会作为window的方法保存。

变量的声明提前:

var声明的变量会在所有代码执行之前被声明,但不会被赋值

函数的声明提前:

  • 使用函数声明形式创建的函数(function 函数() {}会在所有代码执行之前就被创建,所以我们可以在创建声明前来调用
  • 使用函数表达式(var fun=function(){})创建的函数不会被提前创建,不能提前调用

②函数作用域

生命周期:调用函数时创建函数作用域,函数执行完毕后作用域销毁 多函数作用域相互独立,函数作用域可访问全局作用域 函数操作变量时,先在自己作用域中找,找不到再去上一级作用域中找。若要直接使用全局作用域可以通过window对象的属性调用