JavaScript1.6数组方法的扩展

        var tmp = [1, 2, 3, 4, 5, 3];
console.log('indexOf:找出数组中某一对象的下标,如果没有则为-1');
console.log(tmp.indexOf(3) == 2);
console.log(tmp.indexOf(8) == -1);
console.log('lastIndexOf:找出数组中某一对象最后一次出现的下标');
console.log(tmp.lastIndexOf(3) == 5);
console.log('forEach:对数组的每个元素调用函数');
tmp.forEach(alert);
console.log('every:只当所有对象都返回true则为true');
console.log(tmp.every(function (num) {
return num<6;
}));
console.log('some:只要其中一个对象返回true则为true');
console.log(tmp.some(function (num) {
return num>6;
}));
console.log('filter:只保留满足某一具体条件的对象来过滤数组,返回满足条件的数组');
console.log(tmp.filter(function (num) {
return num>3;
}));
console.log('map:将数组中所有对象转换为另一套对象,转换规则由传入的函数来定');
console.log(tmp.map(function (num) {
return num + 2;
}));

运行结果如下图所示:

给数组赋值简单的方式

        var array = [];
for (var i = 0; i < 10; i++) {//这是传统的方式给数组赋值
array.push(i);
} var arr=[i for ( i=0; i<10; i++ )];//同样简单的语句可以实现上述赋值功能 var array1=[];
for (var key in obj) {//传统的通过遍历的方式将对象obj的属性放到数组中
array1.push(key);
} var arr1=[key for (key in obj)];//同样一句简单的话可以实现上述对象赋值功能

let的简单介绍

大家都知道js里面是没有块级作用域的。

        var test = 10;
let (test=20){
alert(test);//20;
}
alert(test);// var test1=10;
alert(let(test1=20) test1);//
alert(test1);// var test3=10;
if(test3==10){
let newTest=20;
test3+=newTest;
}
alert(test3);//
alert(newTest);//报错 newTest未定义 for (let i = 0; i < 10; i++) {
//alert(i);
}
alert(i);//报错 i未定义

解析式赋值

        var a = 10,
b = 20;
[b, a] = [a, b];//交换两个变量的值
alert(a + '|' + b);//20|10
function test() {
return ["John", "October"];
}
var [name,month]=test();//把函数返回的数据解析为两个变量
alert(name+'|'+month);//John|October
var {name:myName}={name:"John"};
alert(myName);//John
var users=[
{name:"John",month:"October"},
{name:"Bob",month:"December"},
{name:"Jame",month:"May"},
];
for ( let { name: name, month: month } in users) {
alert(name+" was born in "+month);
}

利用Canvas制作时钟

界面HTML如下所示:

    <canvas id="demoCanvas" width="150" height="150">
<p>您还在上个世纪吧,现在都html5了,您还在ie6时代?</p>
</canvas>

Script如下:

        function clock() {
//获得当前时钟
var now = new Date(),
sec = now.getSeconds(),
min = now.getMinutes(),
hr = now.getHours();
hr = hr >= 12 ? hr - 12 : hr;
var ctx = document.getElementById('demoCanvas').getContext('2d');//获得绘图区域
ctx.save();
ctx.clearRect(0,0,150,150);//初始化绘图canvas
ctx.translate(75, 75);//将原点移到75,75
ctx.scale(0.4, 0.4);//将所有操作的效果缩小到0.4
ctx.rotate(-Math.PI / 2);//让指针开始指向12点
ctx.strokeStyle = 'black';//初始化绘图属性
ctx.fillStyle = 'black';
ctx.lineWidth = 8;
ctx.lineCap = 'round';
ctx.save();//小时刻度
ctx.beginPath();
for (var i = 0; i < 12; i++) {//每小时一个
ctx.rotate(Math.PI / 6);//将canvas旋转一周的1/12 一周为2*PI
ctx.moveTo(100, 0);//将游标往canvas外侧移动一些
ctx.lineTo(120, 0);//绘制长20px线
}
ctx.stroke();
ctx.restore();
ctx.save();
ctx.lineWidth = 5;//初始化绘图属性
ctx.beginPath();
for (var i = 0; i < 60; i++) {//分钟刻度
if (i%5!=0) {//除去那些整点上的分钟
ctx.moveTo(117, 0);//将游标移远一些
ctx.lineTo(120, 0);//绘制短线
}
ctx.rotate(Math.PI / 30);//将canvas再旋转1/60圆周
}
ctx.stroke();
ctx.restore();
ctx.save();//绘制时针
ctx.rotate((Math.PI / 6) * hr + (Math.PI / 360) * min + (Math.PI / 21600) * sec);//旋转方向
ctx.lineWidth = 14;
ctx.beginPath();
ctx.moveTo(-20, 0);//将时针开头处移动到稍稍偏离中心的位置
ctx.lineTo(80, 0);//在小时刻度附近绘制
ctx.stroke();
ctx.restore();
ctx.save();//绘制分针
ctx.rotate((Math.PI / 30) * min + (Math.PI / 1800) * sec);
ctx.lineWidth = 10;
ctx.beginPath();
ctx.moveTo(-28, 0);//分针要更长一些 所以要更偏离中心一些
ctx.lineTo(112, 0);//绘制的长一些
ctx.stroke();
ctx.restore();
ctx.save();//绘制秒针
ctx.rotate(sec * Math.PI / 30);//旋转到当前秒针位置
ctx.strokeStyle = '#D40000';//这根钱接近红色并且比其它指针都细
ctx.fillStyle = '#D40000';
ctx.lineWidth = 6;
ctx.beginPath();
ctx.moveTo(-30, 0);//偏离中心更远
ctx.lineTo(83, 0);//线段更短
ctx.stroke();
ctx.restore();
ctx.save();//绘制蓝色圆圈
ctx.lineWidth = 14;//边框足够粗 蓝色
ctx.strokeStyle = '#325FA2';
ctx.beginPath();
ctx.arc(0, 0, 142, 0, Math.PI * 2, true);//绘制五个完整的圆 半径为142
ctx.stroke();
ctx.restore();
ctx.restore();
}
window.onload = function () {
clock();//绘制时钟
setInterval(clock, 1000);//此后每秒重绘一次时钟
}

上述代码的效果图如下所示:

利用canvas模拟地球围绕太阳旋转

界面HTML如下所示:

    <canvas id="canvas" height="300" width="300">
</canvas>
<div style="display:none;">
<img src="img/sun.jpg" id="sun" />
<img src="img/moon.png" id="moon" />
<img src="img/earch.png" id="earch" />
</div>

Script如下:

        var imgs = { sun: null, moon: null, earch: null };//初始化要使用的一系列图像
window.onload = function () {
for (var i in imgs) {//从文档中载入所有的图像
imgs[i] = document.getElementById(i);
}
setInterval(draw, 100);//每秒绘制10次
}
function draw() {
var time = new Date();//获得所需的时间间隔
var s = ((2 * Math.PI) )/ 6 * time.getSeconds();
var m = ((2 * Math.PI)) / 6 * time.getMilliseconds();
var ctx = document.getElementById('canvas').getContext('2d');//获得canvas的绘图上下文
ctx.clearRect(0, 0, 300, 300);//清空canvas
ctx.globalCompositeOperation = 'destination-over';//新内容总在旧内容之下绘制(以实现阴影)
ctx.save();
ctx.translate(150, 150);//在150,150绘制
ctx.rotate((s + m) / 10);//将canvas向地球的位置旋转
ctx.translate(105, 0);//向外移动105像素
ctx.fillStyle = 'rgba(0,0,0,0,4)';//填充阴影 半透明状态
ctx.strokeStyle = 'rgba(0,153,255,0.4)';
ctx.fillRect(0, -12, 50, 24);//绘制阴影区域
ctx.drawImage(imgs.earch, -12, -12);//绘制地球
ctx.save();
ctx.rotate(s + m);//相对地球的旋转来转动canvas
ctx.translate(0, 28.5);//将月球放入“轨道”
ctx.drawImage(imgs.moon, -3.5, -3.5);//绘制月球图案
ctx.restore();
ctx.restore();
ctx.beginPath();//绘制地球轨道
ctx.arc(150, 150, 105, 0, Math.PI * 2, false);
ctx.stroke();
ctx.drawImage(imgs.sun, 0, 0);//绘制静态的太阳
}

如果您觉得本篇博文对您有所收获,觉得小女子还算用心,请点击右下角的 [推荐],谢谢!

javascript 未来新方法的介绍的更多相关文章

  1. firefox-Developer开发者站点——关于Object.create()新方法的介绍

    https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object/create Objec ...

  2. javascript的propertyIsEnumerable()方法使用介绍

    hasOwnProperty() 方法用来判断某个对象是否含有指定的自身属性. propertyIsEnumerable()是用来检测属性是否属于某个对象的,如果检测到了,返回true,否则返回fal ...

  3. js中propertyIsEnumerable()方法使用介绍

    javascript的propertyIsEnumerable()方法使用介绍 概述 propertyIsEnumerable()用来检测属性是否属于某个对象的,如果检测到了,返回true,否则fal ...

  4. JavaScript ES6新特性介绍

    介绍 ES6:ECMScript6 首先,一个常见的问题是,ECMAScript 和 JavaScript 到底是什么关系? ECMAScript是一个国际通过的标准化脚本语言: JavaScript ...

  5. 用javascript得到客户端IP的新方法

    javascript得到客户端IP的新方法 很久以来,我都是经过http://fw.qq.com/ipaddress来得到客户端用户的IP,这个方法简单.快速.实用 . 我们调用它的写法是: < ...

  6. Java 8新特性——default方法(defender方法)介绍

    我们都知道在Java语言的接口中只能定义方法名,而不能包含方法的具体实现代码.接口中定义的方法必须在接口的非抽象子类中实现.下面就是关于接口的一个例子: 1 2 3 4 5 6 7 8 9 10 11 ...

  7. javascript生成新标签的三种方法

    javascript生成新标签的三种方法:http://www.cnblogs.com/online-link/p/6062423.html

  8. SQL Server中解决死锁的新方法介绍

    SQL Server中解决死锁的新方法介绍 数据库操作的死锁是不可避免的,本文并不打算讨论死锁如何产生,重点在于解决死锁,通过SQL Server 2005, 现在似乎有了一种新的解决办法. 将下面的 ...

  9. JavaScript ES6 数组新方法 学习随笔

    JavaScript ES6 数组新方法 学习随笔 新建数组 var arr = [1, 2, 2, 3, 4] includes 方法 includes 查找数组有无该参数 有返回true var ...

随机推荐

  1. 关于.Net的面试遐想

    概述 这几天更新相关的面试题目,主是要针对有4年或以上经验的面试者,总体来说,发现面试人员的答题效果和预期相差比较大,我也在想是不是我出的题目偏离现实,但我更愿意相信,是我们一些.Net开发者在工作中 ...

  2. 再记一次w3wp占用CPU过高的解决过程(Dictionary和线程安全)

    在此之前项目有发生过两次类似的状况,都得以解决,但最近又会发现偶尔CPU会跑满,虽然之前使用过WinDbg解决过两次问题但人的记忆是不可靠的,今天处理同样问题的时候还是遇到了一些障碍,这一次希望可以记 ...

  3. 中晟银泰国际中心酒店式公寓介绍 业主交流QQ群:319843248

    行政区域:中原区 区域板块:西北板块 项目位置:中原路与华山路东北角(中原万达北侧中原西路对面) 建筑类型:高层 物业类别:酒店式公寓 户型面积:公寓35-100平米 开发商:中晟集团 投资商:中晟集 ...

  4. Linux 配置只安装 64 位软件包

    Centos.RHEL等系统,yum 安装的时候有时候会安装32的,然而我们只需要安装64位的软件! 解决方法: yum只安装 64 位的包,只需在 /etc/yum.conf 中加入 "e ...

  5. android Baseadapter 和 ViewHolder的使用

    昨晚学习了徐大神的关于BaseAdapter的讲解,让我受益匪浅特来博客留下印记 说到baseadapter大家一定都不陌生,下面这张图就展示了数据.listview.baseadapter 之间的关 ...

  6. 十天冲刺---Day5

    站立式会议 站立式会议内容总结: 燃尽图 照片 PM确实不应该交给组内编码最强的人来做. 编码的过程还要考虑整个项目的流程压力较大. 需要队友的支持和沟通.

  7. 非常实用的jquery版表单验证

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <script src ...

  8. Oracle报 ORA-00054资源正忙的解决办法

    来源于:http://www.cnblogs.com/loveLearning/p/3625544.html oracle之报错:ORA-00054: 资源正忙,要求指定 NOWAIT 问题如下: S ...

  9. vmware 虚拟机克隆之后配IP重启网络失败

    在日常实验中,我新安装了一个虚拟机(全新的)node1,然后为了实验,又克隆了一天虚拟机node2 然后我给两台机器设置IP和主机名node1 :  192.168.220.128 node2 : 1 ...

  10. bitmap转化base64

    /** * bitmap转化base64 */public static String bitmapToBase64(Bitmap bitmap) { String result = null; By ...