JavaScript 44 Puzzlers

http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651550987&idx=1&sn=f7a84b59de14d0b99d5e12a265d55fd2&scene=0#wechat_redirect

http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=2651550991&idx=1&sn=ed60b424de47cceb2b81e7df40b57efa&scene=0#wechat_redirect

http://javascript-puzzlers.herokuapp.com/

/*
44 javascript puzzlers
http://javascript-puzzlers.herokuapp.com/

// 001
var res = [‘1‘,‘2‘,‘3‘].map(parseInt);
console.log(res);// 输出结果为:[1,NaN,NaN]
// 输出结果为:[parseInt(‘1‘,0),parseInt(‘2‘,1),parseInt(‘3‘,2)]

function foo1(){ // 查看传入的参数都是啥;
    var l = arguments.length;
    console.log(‘arguments begin:‘);
    for(var i=0;i<l;i++){
        console.log(arguments[i]);
    }
    console.log(‘arguments end;‘);
}
var res2 = [‘1‘,‘2‘,‘3‘].map(foo1);

// map方法会给原数组中的每一个元素都按顺序调用一次callback函数;
// callback函数会被传入3个参数:数组元素,元素索引,原数组本身;

var a = ‘global a‘;
function foo2(){
    console.log(this.a);
}

foo2(); // 直接调用会输出 ‘global a‘

var obj = {};
obj.a = ‘object a‘;

var res = [1,2,3].map(foo2,obj); // 会输出三个‘object a‘
// map方法传入一个回调函数,并且传入一个回调函数中的this对象;
console.log(res); // [undefined, undefined, undefined]

// 002
var res = [typeof null, null instanceof Object];
console.log(res); // [‘object‘,false]
// js共有6种数据类型 Undefined,String,Number,Boolean,Object,Null
// 每种对应的typeof为‘undefined‘,‘string‘,‘number‘,‘boolean‘,‘object‘,‘object‘
// Function 不是数据类型,但是typeof Function 返回 ‘function‘

// JavaScript instanceof运算符代码
// http://www.ibm.com/developerworks/cn/web/1306_jiangjj_jsinstanceof/
function instance_of(L,R){ // L表示左表达式,R表示右表达式
    var O = R.prototype; // 取R的显示原型
    L = L.__proto__; // 取L的隐式原型
    while(true){
        if(L === null){
            return false;
        }
        if(O === L){ // 这里重点:当O严格等于L时,返回true
            return true;
        }
        L = L.__proto__;
    }
}

function Aoo(){}
function Foo(){}
Foo.prototype = new Aoo(); // JavaScript原型继承
var foo = new Foo();
console.log(foo instanceof Foo); // true
console.log(foo instanceof Aoo); // true
console.log(Object instanceof Object); //true
console.log(Function instanceof Function); //true
console.log(Number instanceof Number); // false
console.log(String instanceof String); // false
console.log(Function instanceof Object); // true
console.log(Foo instanceof Function); // true
console.log(Foo instanceof Foo); // false

// 003
//var res = [[3,2,1].reduce(Math.pow),[].reduce(Math.pow)]; // 这一行就会直接报 TypeError,不能对空数组调用reduce方法;
//console.log(res);

//var res = [3,2,1].reduce(Math.pow);
//console.log(res); // 输出9 , Math.pow(3,2),Math.pow(9,1)

function foo1(){
    var l = arguments.length;
    console.log(‘arguments begin:‘);
    for(var i=0;i<l;i++){
        console.log(arguments[i]);
    }
    console.log(‘arguments end:‘);
}
//var res = [‘a‘,‘b‘,‘c‘].reduce(foo1);
// reduce中的回调函数会获得四个参数: 初始值(或者上一次回调函数的返回值,没有返回值就是undefined),当前值,当前值索引,原数组
// 如果没有初始值,就会把数组第一个值作为初始值;
//var res = [‘a‘,‘b‘,‘c‘].reduce(foo1,‘A‘);

//var obj = {};
//var res = [1,2,3].reduce(obj); // 如果回调函数不是函数,也会直接抛出TypeError异常

// 004

var val = ‘smtg‘;
console.log(‘Value is ‘ + (val===‘smtg‘)?‘Something‘:‘Nothing‘);
// + 优先级 大于 ? , 等价于 ‘Value is true‘?‘Something‘:‘Nothing‘

// 005

var name=‘World‘;
(function(){
    if(typeof name === ‘undefined‘){
        var name = ‘Jack‘;
        console.log(‘Goodbye ‘+name);
    }else{
        console.log(‘Hello ‘+name);
    }
})();

(function(){
    var a;
    if(typeof a === ‘undefined‘){
        var name = ‘Jack‘;
        console.log(‘Goodbye ‘+name);
    }else{
        console.log(‘Hello ‘+name);
    }
})();

(function(){
    var a=‘‘;
    if(typeof a === ‘undefined‘){
        var name = ‘Jack‘;
        console.log(‘Goodbye ‘+name);
    }else{
        console.log(‘Hello ‘+name); // 这个变量的确被提升了;Hoisting
    }
})();

(function(){
    var a=‘‘;
    if(typeof a === ‘undefined‘){
        var name = ‘Jack‘;
        console.log(‘Goodbye ‘+name);
    }else{
        console.log(‘Hello ‘+name1); //  这个就会报异常,name1 is not defined
    }
})();

// 006

var END = Math.pow(2,53); // 9007199254740992
var START = END - 100;
var count = 0;

//for(var i= START;i<=END;i++){ // 这个就是死循环了;
//    count++;
//}
//console.log(count);

var end1 = END+1; // end1与END是一样的;
console.log(END);
console.log(end1);

var end2 = Math.pow(2,100); // 已经是指数表示方式了;1.2676506002282294e+30
var end21 = end2+1;
console.log(end2);
console.log(end21);
// 在console中可以表示的最大值是Math.pow(2,1023),8.98846567431158e+307
// Math.pow(2,1024)终于显示Infinity
// Number.MAX_VALUE = 1.7976931348623157e+308

// 007

var ary = [0,1,2];
ary[10] = 10;
var res = ary.filter(function(x){return x===undefined;});
console.log(res);

// 官方Array.filter()的polyfill:
if (!Array.prototype.filter) {
  Array.prototype.filter = function(fun/*, thisArg*[DEL THIS]/) {
    ‘use strict‘;

    if (this === void 0 || this === null) {
      throw new TypeError();
    }

    var t = Object(this);
    var len = t.length >>> 0;
    if (typeof fun !== ‘function‘) {
      throw new TypeError();
    }

    var res = [];
    var thisArg = arguments.length >= 2 ? arguments[1] : void 0;
    for (var i = 0; i < len; i++) {
      if (i in t) { // 首先判断是否在数组内;
        var val = t[i];

        // NOTE: Technically this should Object.defineProperty at
        //       the next index, as push can be affected by
        //       properties on Object.prototype and Array.prototype.
        //       But that method‘s new, and collisions should be
        //       rare, so use the more-compatible alternative.
        if (fun.call(thisArg, val, i, t)) {
          res.push(val);
        }
      }
    }

    return res;
  };
}

*/

// 008
var one = 0.1;
var two = 0.2;
var six = 0.6;
var eight = 0.8;

var res = [two-one==one, eight-six==two];
console.log(res); // [true,false]
时间: 2024-10-06 02:14:20

JavaScript 44 Puzzlers的相关文章

JSBinding + SharpKit / Convert 2DPlatformer to JavaScript version

2DPlatformer is a Unity3D official demo. Asset store URL: https://www.assetstore.unity3d.com/en/#!/content/11228 What we are going to do now is convert 2DPlatformer to JavaScript version. All C# scripts are all in 2DPlatformer/Scripts/ folder. We are

javascript写的新闻滚动代码

在企业站中,我们会看到很多新闻列表很平滑的滚动,但是这种功能自己写太浪费时间,下面是我整理好的一组很常用的新闻列表滚动,有上下分页哦! 1.body里面 1 <div class="tz_tagcgnewcontent"> 2 <div id="feature-slide-block"> 3 <div class="tz_newlist"> 4 <div class="tz_newimg&quo

《众妙之门 JavaScript与jQuery技术精粹》 - 读书笔记总结[无章节版][1-60]

近期,反复思考后,还是把所有的笔记通过随笔的方式整理出来放在论坛里,可以让自己对学过的知识有个比较系统而清晰的呈现: 同时,为以后用到相关的知识点做一个整理和查阅. (一)JSON-P 的实例代码展示 1 <div id="delicious"></div> 2 <script type="text/javascript"> 3 // 可以在JavaScript中直接使用JSON,并且封装在函数调用中时,可作为API的返回值. 4

APICloud学习笔记之FrameGroup覆盖bug

当子页面再打开framegroup时,此framegroup会置于最顶部此bug处理方法如下: 1.在子页面定义一个事件控制framegroup的显示 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <meta charset="UTF-8"> 5 <meta name="viewport" content="maximum-scale=1.0,minimum-scale=1

基本_移动类型轮播效果_框架

一.基本元素: D:display window;用户浏览的窗口: S:scroll window;存放内容的大容器:通过移动来改变显示的内容: C:content;内容信息: B:button;按钮,多种样式,可选: 二.思路: 通过移动S 的位置,由于C位于S中,所有的C将会同时跟随S而移动. 在D中显示的内容将会被改变. 三.html结构: 1 <div class=”D”> 2 <div class=”S”> 3 <div class=”C”>content&l

Handlebars.js循环中索引(@index)使用技巧(访问父级索引)

使用Handlebars.js过程中,难免会使用循环,比如构造数据表格.而使用循环,又经常会用到索引,也就是获取当前循环到第几次了,一般会以这个为序号显示在页面上. Handlebars.js中获取循环索引很简单,只需在循环中使用{{@index}}即可. 1 <!DOCTYPE html> 2 <html> 3 <head> 4 <META http-equiv=Content-Type content="text/html; charset=utf-

js封装tab标签页

1 <html> 2 <head> 3 <title></title> 4 <meta charset="UTF-8"> 5 <style> 6 *{ padding:0; margin:0;} 7 .block{ display:block;} 8 .none{ display:none;} 9 #wrap,#wraps{ width:500px; height:230px; overflow:hidden; m

PHP-----作业题:显示详细信息

显示详细信息(详细信息按钮点击(AJAX) 显示 弹窗) 封装类代码: 1 <?php 2 class DBDA 3 { 4 public $host="localhost";//服务器地址 5 public $uid="root";//用户名 6 public $pwd="";//密码 7 8 public $conn;//连接对象 9 //操作数据库的方法 10 //$sql代表需要执行的SQL语句 11 //$type代表SQL语句的

Html5 Json应用

本文主要说明Json的基本概念,和一个在Html中使用Json给元素赋值的小例子,属于基础性信息 什么是 JSON ? JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation) JSON 是轻量级的文本数据交换格式 JSON 独立于语言 * JSON 具有自我描述性,更易理解 * JSON 使用 JavaScript 语法来描述数据对象,但是 JSON 仍然独立于语言和平台.JSON 解析器和 JSON 库支持许多不同的编程语言. 相比 XML