作用域,预解析,对象,内置方法 Math Date Array

作用域

一段程序代码中所用到的名字并不总是有效可用的,而限定这个名字(变量)的可用性的代码范围,就是这个名字的作用域,作用域提高了逻辑程序的局部性,增强了可靠性,减少了名字冲突;

JavaScript作用域(es6)之前:全局作用域,局部作用域

全局作用域:整个script标签或者是一个单独的JS文件

局部作用域(函数作用域):在函数内部就是作用域;

变量作用域

全局变量:在全局作用域下声明的变量;如果在函数内部没有声明(var)直接赋值的变量也是全局变量 num = 2;

局部变量:在函数内部声明的变量;

全局变量 和 局部变量

  • 全局变量任何地方都可以使用;只有浏览器关闭的时候才会销毁,比较占用内存资源;
  • 局部变量只有在函数内可以使用;当程序执行完毕就会销毁,比较节约内存资源;

作用域链

内部函数访问采用链式查找外部函数的变量来决定取哪个值, 这种结构称为作用域链

var num = 10;
function fu() {
    var num = 20;
    function fun() {
        var num = 30;
        // 在fun内部往外部查找
        // 1. 如果 fun 没有声明 num 就去找到 fu 内部 num 变量;
        // 2. 如果 fun 和 fn 内部都没有 num 就去全局找;
        // 3. 如果 都没有 报错 num is not defined;
        console.logg(num);
    }
    fun();
}
fu();

预解析

JS 解析器运行 JS 分为两步:预解析,代码执行

预解析: Js引擎会把 js 里面所有的 var 还有 function 提升到当前作用域的最前面

代码执行:从上往下依次执行;

变量预解析(变量提升)

就是把所有的变量声明提升到当前作用域最前面,不提升赋值操作;

console.log(num);  // num is not defined;
var num = 10;
// 等价于
var num;
console.log(num);
num = 10;
fun(); // fun is not a function
var fun = function () {...}
// 等价于
var fun;
fun();
fun = function () {...};

函数预解析(函数提示)

就是把所有函数的声明提升到当前作用域的最前面,只提升不调用

fun()
function fun() {...}
// 等价于
function fun() {...}
fun();

案例:

fn();
console.log(a);
console.log(b);
console.log(c);
function fn() {
    var a = b = c = 9;
    // var a = 9, b = 9, c = 9; 这种声明方式 b 和 c 是全局变量
    console.log(a);
	console.log(b);
	console.log(c);
}

对象

在 javascript 中,对象是一组无序的相关属性和方法的集合,所有事物都是对象,String Number Array function ...

创建对象的三种方式

对象字面量

// 创建一个名称为 obj 的对象;并且包含多个属性和一个方法;
var obj = {
	uname: ‘zs‘,
    uage: ‘23‘,
    usex: ‘0‘,
    sayHi: function () {
        console.log(‘Hi~‘);
    }
};
// 1. 调用对象属性;
console.log(obj.uname);
console.log(obj[‘uage‘]);
// 2. 调用对象方法
obj.sayHi();

new Object

var obj = new Object(); // 声明一个空对象;
obj.name = ‘zs‘;
obj.sayHi = function () {
    return ‘Hi‘;
}
console.log(obj.name);
console.log(obj.sayHi());

构造函数:是一种特殊的函数,主要用来初始化对象,即为对象成员赋初始化值,可以把对象中一些公用的属性和方法抽取出来,封装到这个函数里;

// 构造函数中是不需要return的
// 抽象了对象的公共部分,封装到了函数里面,泛指一大类(class)
function Person(name) {
    this.name = name;
    this.sayHi = function (say) {
        console.log(say);
    }
}
// 特指某一个,通过 new 关键字创建对象的过程也称对象实例化
var zs = new Person(‘zs‘);
console.log(zs.name);
zs.sayHi(‘Hi~‘);
// new 执行过程
// 1, 在内存中创建一个空对象
// 2, 让 this 指向这个新对象
// 3, 执行构造函数里面的代码,给这个新对象添加属性和方法
// 4, 返回这个对象

遍历对象

var obj = {
    uname: ‘red‘,
    say: function () {
        console.log(‘Hi‘);
    }
}
// 遍历对象
for (var k in obj) {
    console.log(k); // 输出键;uname, say
    console.log(obj[k]); // 输出值;red, function
}

JavaScript 内置对象

Math

Math.PI; // 返回圆周率
Math.max(1, 2); // 返回最大值,非数字返回NaN, 空返回 -infinity
Math.min(1, 2); // 返回最小值,非数字返回NaN, 空返回 infinity
Math.abs(1); // 绝对值 字符串型数字会隐式转换,非数字返回 NaN
Math.floor(1.9); // 向下取整;
Math.ceil(1.1); // 向上取整;
Math.round(1.5); // 四舍五入;
Math.random(); // 随机数 0~1 不包含1
// 案例 任意两个数之间的随机值,包含最大值
function getRandom(max, min) {
    return Math.floor(Math.random() * (max - min + 1) + min);
}

Date

// date 是构造函数 要通过new来创建实例
var date = new Date(); // 默认输出当前系统时间 2020-03-25T14:45:05.347Z
var date = new Date(‘2019-10-1 8:8:8‘) // 可以设置时间注意格式 2019-10-01T00:08:08.000Z
方法 说明
getFullYear(); 获取当前年
getMonth(); 获取当前月(0 - 11)
getDate(); 获取当前日
getDay(); 获取当前 星期(星期天 0)
getHours(); 获取当前小时
getMinutes(); 获取当前分钟
getSeconds(); 获取当前秒

获取时间戳

var date = new Date();
date.valueOf();
date.getTime();
// 简单写法
var date1 = +new Date();
// H5 新增方法
Date.now();

Array

检测是否为数组

var arr = [];
console.log(arr instanceof Array);  // true false
console.log(Array.isArray(arr)); // true false  H5 新增 IE9+

添加删除数组元素

方法名 说明 返回值
arr.push(1, 2); 末尾添加一个或多个元素,修改原数组 返回新的长度
arr.pop(); 末尾删除一个元素,修改原数组 返回被删除的元素
arr.unshift(1, 2); 开头添加一个或多个元素,修改原数组 返回新的长度
arr.shift(); 开头删除一个元素,修改原数组 返回第一个被删除的元素

数组排序方法

方法 说明 返回值
reverse(); 翻转数组 已经翻转完成的数组
sort(); 数组排序,但是如果碰到2位数以上的元素需要特殊处理 已经排序完成的数组
// **以上两个方法会修改原数组**
var arr = [13, 44, 2, 1, 0];
arr.sort(function (a, b) {
	// return a - b; // 升序排列
    return b - a; // 降序排列
});

数组索引方法

方法名 说明 返回值
indexOf(); 数组中查找给定元素的第一个索引 如果存在返回索引号,不存在返回 -1
lastIndexOf(); 在数组中的最后一个索引 如果存在返回索引号,不存在返回 -1
var arr = [‘pink‘, ‘red‘, ‘bule‘, ‘red‘];
console.log(indexOf(‘red‘)); // 1 从前面开始找只找一个
console.log(lastIndexOf(‘red‘)); // 3
// 数组去重
function unique(arr) {
    var newArr = [];
    for (var i = 0; i < arr.length; i++) {
        if (newArr.indexOf(arr[i]) === -1) {
            newArr.push(arr[i]);
        }
    }
    return newArr;
}

原文地址:https://www.cnblogs.com/article-record/p/12571775.html

时间: 2024-10-14 06:30:17

作用域,预解析,对象,内置方法 Math Date Array的相关文章

day②:一切皆对象+内置方法+int

一.python基础 对于python,一切事物都是对象,对象基于类创建. 例子: li=[11,22,33] li.append(44) 对象所具备的方法,例如:li列表的增删改查,都不是对象自己所有的,它只是去到这个类里面的方法执行的! 二.数据内型的内置方法 type() 查看对象的类型 dir(类型名) 查看类中提供的所有功能 help(类型名) 查看类中所有详细的功能 help(类型名.功能名) 查看类中某功能的详细 关于dir(),之后,你会看到两边带下划线和不带下划线的方法: __

js-DOM ~ 04. BOM:浏览器对象模型window. 、定时器、在线用户、祝愿墙、BOM的内置方法内置对象

multiple. select列表多选 触发事件后调用有参数的函数要先创建一个函数,然后在函数内调用执行函数 Array.from(伪数组):伪数组变为真数组 indexOf():查询字符的索引 a)  indexOf('abcde') i.      indexOf('a')的索引是0 ii.      indexOf('abc')的索引是0,按照第一个字符的索引 iii.      indexOf('ac')的索引是-1,查找不到ac连续的字符 iv.      indexOf('f')的

用JAVA编写浏览器内核之实现javascript的document对象与内置方法

原创文章.转载请注明. 阅读本文之前,您须要对浏览器怎样载入javascript有一定了解. 当然,对java与javascript本身也须要了解. 本文首先介绍浏览器载入并执行javascript的原理. 其次将介绍怎样用java与javascript互调用对象. 最后介绍怎样用java实现javascript的document对象与其他内置方法. 浏览器从server得到含有javascript代码的html文本后,将顺序运行javascript代码块. 看代码是最简单的方式: packag

JavaScript基础:BOM的常见内置方法和内置对象

本文最初发表于博客园,并在GitHub上持续更新前端的系列文章.欢迎在GitHub上关注我,一起入门和进阶前端. 以下是正文. BOM的介绍 JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for语句等. DOM:文档对象模型,操作网页上的元素的API.比如让盒子移动.变色.轮播图等. BOM:浏览器对象模型,操作浏览器部分功能的API.比如让浏览器自动滚动. 什么是BOM BOM

jsp中的四个作用域,九个内置对象分别是什么?

九大内置对象: 内置对象(又叫隐含对象),就是在jsp中,不需要创建(由服务器<容器>来创建),可以直接使用的对象. 对象 含义 类 作用域 request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request response 响应对象 类型 javax.servlet.ServletResponse 作用域 page pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 page ses

python开发函数进阶:命名空间,作用域,函数的本质,闭包,内置方法(globales)

一,命名空间 #局部命名空间#全局命名空间#内置命名空间 #三者的顺序#加载顺序 硬盘上--内存里#内置-->全局(从上到下顺序加载进来的)-->局部(调用的时候加载) 1 #!/usr/bin/env python 2 #_*_coding:utf-8_*_ 3 4 #全局命名空间 5 a = 5 6 b = 8 7 #局部命名空间(函数) 8 def my_max(): 9 c = a if a > b else b 10 return c 11 m = my_max() 12 pr

Python中使用help查看某一类对象的内置方法

Python中不同类型的对象有不同的方法,那么如何查看某一类型对象的方法?我们可以使用help()函数 用法help() ,括号中写对象的类型.比如查看数据类型的方法: help(int)  |  Methods defined here:  |    |  __abs__(...)  |      x.__abs__() <==> abs(x)  |    |  __add__(...)  |      x.__add__(y) <==> x+y  |    |  __and__

JavaScript---Bom树的操作,内置方法和内置对象(window对象,location对象,navigator对象,history对象,screen对象)

JavaScript---Bom树的操作,内置方法和内置对象(window对象,location对象,navigator对象,history对象,screen对象) 一丶什么是BOM ???????Bom:Browser Object Model,浏览器对象模型.操作浏览器部分的功能的API(事件/函数). 结构图: ???分析:1.window对象是Bom的顶层对象.所有的对象都是从windom延伸出来的,称其为window子对象. ?????? 2.dom是bom的一部分 ?????? 3.

python-面向对象速查表-内置方法-内置函数-内置属性(只整理了部分内容)

今日临时总结的内容,可能还有些不正确的地方,初步当做个速查表吧. 类的内置函数(继承object的,自己重写) 内置函数 执行时机 注意点 调用案例 __init__ 实例化对象时 不允许写返回值(return None和不返回没区别)子类重写了__init__()方法要在子类中的__init__()方法调用父类的__init__方法(super(当前类, self).__init__(参数)) stu = Student() __new__ 类实例化被调用时 stu = Studetn() _