国强极客
有问题请加微信:guoqiang7585
国强极客

2、javascript类型转换 函数 作用域

2、javascript类型转换 函数 作用域
全国大流量卡免费领

1、ES5中6种数据类型:

  1. 数值型:number(int、float)
  2. 字符串:string
  3. 布尔:Boolean
  4. 未定义:undefined
  5. 空:null
  6. 对象:Object(Array、Object)

2、typeof作用:

判断变量的数据类型:

  • typeof 123 返回 number
  • typeof “hello” 返回string
  • typeof true 返回boolean
  • typeof undefined 返回undefined
  • typeof null 返回 object
  • typeof [‘apple’, ‘banana’] 返回 object
  • typeof {name:’李四’, age:23} 返回 object
  • 区分null、数组、对象使用instanceof。

3、null和undefined的区别

  • 一个变量被声明,但是没有给值,则它的值就是undefined;
  • 手动设置一个变量的值为null,则这个变量的值才为null。
  • 转换为布尔之后,他们都是false。

4、直接量形式的对象

var obj = {};
var obj1 = {name:'lisi', age:20};
var obj2 = {
    name:'lisi',
    age:20,
    fn:function(){
        console.log(this.age); //this表示当前的对象obj2
}
}

5、原始类型和引用类型

PHP中数组是值传递的,对象是引用传递。
JS中,数组和对象都是引用传递的。

  //声明一个对象
    var obj = {
        name:'李四',
        age:20
    };

    /*var a = obj; //赋值给其他变量,赋的值是对象的地址(指向堆区的地址)
    a.name = '张三';
    console.log(obj.name);  //由于前面的a.name=张三,所以会影响到obj的name,所以输出张三*/

    /*function m(o){
        o.age = 30;
    }
    m(obj);
    console.log(obj.age); // 30*/

    var arr = ['apple', 'banana'];
    var b = arr;
    b[0] = 'pear';
    console.log(arr);//

PHP中数组是值传递的

6、常量

  • 定义常量用const
  • 常量不能在同一个作用域中从新定义。
  • 常量的作用域是{}

数据类型转换

1、转换成字符串

使用字符串方法toString([进制])转换,但是null和undefined无法转换。
使用顶层函数String()可以将任何数据类型转换成字符串,包括null和undefined。
在其他数据类型和字符串类型进行连接(+操作)操作时,会自动对其他数据类型使用String()强制转换成字符串,然后在相加(连)

将其他数据类型的值转换成字符串,可以使用toString(),也可以使用String()。区别在于String可以转换任何类型的值为字符串toString()不能转换undefined和null。区别二是语法不同。

使用toString() : 待转换的变量.toString(); 
使用String() : String(待转换的变量);

使用toString转换:

使用String转换:

隐式转换:在其他数据类型和字符串类型进行连接(+操作)操作时,会自动对其他数据类型使用String()强制转换成字符串,然后在相加(连)

注释:[object Object] 第一个object表示是何种数据类型,第二个Object表示是那种类型的对象

转换成数值型

1、parseInt() — 转换成整型

parseInt() 方法首先查看位置 0 处的字符,判断它是否是个有效数字;如果不是,该方法将返回 NaN(not a number),不再继续执行其他操作。但如果该字符是有效数字,该方法将查看位置 1 处的字符,进行同样的测试。这一过程将持续到发现非有效数字的字符为止,此时 parseInt() 将把该字符之前的字符串转换成数字。
例如,如果要把字符串 “12345red” 转换成整数,那么 parseInt() 将返回 12345,因为当它检查到字符 r 时,就会停止检测过程。
字符串中包含的数字字面量会被正确转换为数字,比如 “0xA” 会被正确转换为数字10。不过,字符串 “22.5” 将被转换成22,因为对于整数来说,小数点是无效字符。

2、parseFloat() — 转换成浮点型

道理和转换成整型道理一样,只不过浮点型允许有一个小数点出现

3、Number() — 强制转换

Number() 函数的强制类型转换与 parseInt() 和 parseFloat() 方法的处理方式相似,只是它转换的是整个值,而不是部分值
用 Number() 进行强制类型转换,”1.2.3″ 将返回 NaN,因为整个字符串值不能转换成数字。如果字符串值能被完整地转换,Number() 将判断是调用 parseInt() 方法还是 parseFloat() 方法。

3、转换成布尔型

显示的转换是使用Boolean()函数,对需要转换的内容进行转换。
以下内容在转换成布尔值时会被转换成false
数值型的 0
数值型的 0.0
布尔型的 false
空字符串 “”
非数字 NaN
undefined
null
除此以外,其他所有值都会转换成true,包括 “0”、空数组 [] 和空对象 {} 。

流程控制

1、顺序结构

顺序结构,体现了代码从上到下依次执行。但是在JS中,要注意两点能够打破顺序结构的知识点,一点是变量提升。另一点是函数预加载
变量提升的例子:

函数预加载的例子:

2、分支结构

if()…else….
if()…else if()…else…
switch (待比较的变量) {
    case xxx:
        xxx;
        break;
}
//new Date()  得到了时间日期对象
//对象调用里面的成员使用点语法。  new Date().getDay();
var week = new Date().getDay(); //获取一个数字格式的星期
//console.log(week);
var week_zh_cn; //中文格式的星期
switch (week) {
    case 2:
        week_zh_cn = '二';
        break;
    case 3:
        week_zh_cn = '三';
        break;
    case 1:
        week_zh_cn = '一';
        break;
    case 4:
        week_zh_cn = '四';
        break;
    case 5:
        week_zh_cn = '五';
        break;
    case 6:
    case 7:
        week_zh_cn = '末';
        break;
    default:
        console.log('格式错误');
        break;
}

console.log('今天是星期' + week_zh_cn);

3、循环结构

while…
do…while…
for…
for…in…

4、continue和break

函数基础

1、定义与调用

function 函数名(参数列表) {
    //函数体
    //return xxx;
}
/**************** 使用function声明函数,并调用 *******************/
//定义函数,参数为一个大于0 的数字n,要求返回1+2+3+....+n 的和
function sum(n){
    //定义一个和
    var s = 0; //默认是0
    for(var i=1; i<=n; i++){
        s = s + i; // s += i;
    }
    //循环结束之后,就得到一个和
    return s;
}
//调用函数
console.log(sum(100));

这种方式定义的函数可以先调用,后定义,也就是函数预加载。

2、函数表达式

函数也是值

这种方式定义的函数可以先调用,后定义,也就是函数的预加载

既然函数可以看做是变量,那么就可以像定义变量一样来定义函数,这就是函数表达式的形式:

//定义一个变量,值是一个函数类型。这种方式定义函数也是可以的
var b = function (x){
    console.log('今天是周' + x);
};
b('三'); //调用函数

3、函数预加载

函数预加载指的是哪种方式定义的函数呢?

函数预加载指定是在同一个script代码段中,由“function xxx(){}”这种方式定义的函数,可以先调用函数,再声明函数。
注意不要在非函数的代码块中声明函数

4、立即调用模式

5、参数

形参:定义函数时,约定的参数
实参:调用函数时,传递给函数的实际值。
JS函数,参数传递非常灵活,定义的形参和实际传入的实参个数可以不一样。

ES5中,函数的参数不可以用默认值。ES6中,函数的参数可以有默认值的。目前IE11只支持部分ES6的内容。
那么在ES5中,如何实现形参有默认值的写法呢?

作用域

1、作用域分类

作用域指的是变量起作用的范围。
分为全局作用域和局部作用域。其中局部作用域也叫做函数作用域。

2、作用域规则

规则一:函数可以使用函数以外的变量 php不可以 可以使用glouble全局变量

规则二:函数内部,优先使用函数内部的变量

函数内部也会发生变量提升:

规则三:函数内部没有用var声明的变量,也是全局变量

3、作用域链

var a = 10;
function fn1(){
    var a = 20;
    function fn2(){
        var a = 30;
        console.log(a);
    }
    fn2();
}

fn1(); // 30

下面是对应的图示

  var a = 10;
    function f1(){
        a = 20;
        function f2(x) {
            var a = 30;
            console.log(x);
        }
        f2(a);
    }
    f1();//20
    console.log(a);//20
var a = 10;
    function f1(x) {
        //形参x,也算是f1 函数内部的局部变量
        function f2() {
            console.log(x); // 10
        }
        f2();
    }
    f1(a);//10

在内部函数中查找变量的时候,优先从函数内部自身查找,如果没有查到,则向外层查找,如果外层还没有,则继续向上一层查找,一直查询到全局作用域。这种链式的查找方式就是作用域链。

标准库(内置对象)

参考资料:
火狐开发社区:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects
微软开发社区:https://msdn.microsoft.com/zh-cn/library/aa155110.aspx
w3c官网:http://www.w3school.com.cn/jsref/index.asp

1、Math对象–数学对象

Math对象成员调用方式: Math.成员

属性:
Math.PI — 返回圆周率
方法:
Math.abs(); — 返回绝对值(正数的绝对值是它本身, 负数的绝对值是它的相反数)
Math.ceil() — 对数进行上舍入
Math.floor() — 对数进行下舍入
Math.round() — 对数进行四舍五入
Math.random() — 返回一个0~1之间的随机数(0,1]
随机整数公式:Math.floor(i + Math.random() * (j – i + 1)); //j 表示最大值,i表示最小值

    //圆周率
    console.log(Math.PI); // 3.141592653589793

    console.log(Math.abs(-3)); // 3 --- 返回绝对值(正数的绝对值是它本身, 负数的绝对值是它的相反数)
    console.log(Math.ceil(3.14)); // 4--- 对数进行上舍入
    console.log(Math.floor(6.7)); //6 --- 对数进行下舍入
    console.log(Math.round(4.3)); //4 --- 对数进行四舍五入
    console.log(Math.random()); // --- 返回一个0~1之间的随机数(0,1]

    Math.floor(i + Math.random() * (j – i + 1)); //随机整数公式:j 表示最大值,i表示最小值
    //比如获取1~10之间的整数
    console.log(Math.floor(1+Math.random()*10));

2、Date对象–时间日期对象

获取 年、月、日、时、分、秒、(星期)

var d = new Date(); //实例化,得到对象
//获取年
var nian = d.getFullYear();
 //实例化Date对象
    var d = new Date();
    //获取四位数的年
    var nian = d.getFullYear();
    //获取月(0~11)
    var yue = d.getMonth() + 1; //加 1 之后,才是正常的月 getMonth()获取0-11
    //获取日
    var ri = d.getDate();
    //获取时
    var shi = d.getHours();
    //获取分
    var fen = d.getMinutes();
    //获取秒
    var miao = d.getSeconds();
    console.log(nian + '年'+yue+'月'+ri+'日 '+shi+':'+fen+':'+miao);
    //输出结果:2018年9月1日 17:12:11

3、String对象–字符串对象

String对象中提供的方法都是处理字符串。

用法一:

var s = new String(要处理的字符串);  //实例化对象
console.log(s.substr(1));  //对象通过点语法调用String对象的成员方法

用法二:把字符串直接当做对象来使用

console.log(要处理的字符串.substr(1));
 //用法一
    var s = new String('hello world');
    console.log(s.length); // 11 表示字符串长度
    console.log(s.indexOf('a')); // 没有查到,返回-1
    console.log(s.indexOf('e')); //查到了,返回位置 1

 //用法二:直接把字符串当做字符串对象来使用
    console.log('hello world'.indexOf('e')); // 1
    console.log('abcdefg'.substr(2, 3)); // cde

Array对象–数组对象

//首先创建一个数组
var arr = ['apple', 'pear'];  
var arr = new Array('apple', 'pear');
//因为数组也是对象,那么就可以直接使用 数组.成员方法
arr.push('xigua');
console.log(arr); // ['apple', 'pear','xigua']

总结

1.能够知道什么是数据类型隐式转换及规则

a)隐式转换发送在变量和字符串相连接(+)的时候,会自动的(隐式的)将其他数据类型先根据String()转换成字符串,然后在相连。
b)在比较的时候,会将其他数据类型的值转换成布尔型,然后在比较。

2.能够用代码写出JS函数的定义形式和调用形式(多种)

a)function a (){} //调用函数 a();
b)var a = function(){}; //调用函数 a();

3.能够说出函数的形参和实参的区别

a)略

4.能够理解匿名函数立即调用的定义形式和调用形式

a)(function(){})(); 立即调用

5.能够理解变量作用域的概念

a)作用域表示变量能够起作用的范围。理解就可以。

6.能够说出局部变量和全局变量的区别

a)局部变量只能局部作用域中使用
b)全局变量在所有地方都可以使用

7.能够说出作用域的访问规则及原理

a)函数可以使用函数以外的变量
b)函数优先使用函数内部的变量,注意变量提升
c)函数内部没有用var声明的变量也是全局变量(需要调用函数)

8.能够说出js中常见的系统对象(Math、Date、String、Array)

a)注意,这里一定要会查手册

9.能够查阅系统对象的常用方法

赞赏
全国大流量卡免费领
对内容有疑问,请加我微信:guoqiang7585

国强极客

2、javascript类型转换 函数 作用域
1、ES5中6种数据类型: 数值型:number(int、float) 字符串:string 布尔:Boolean 未定义:undefined 空:null 对象:Object(Array、Object) 2、typeof作用: 判断变…
扫描二维码继续阅读
2019-12-04