一些值得问问题的js代码小片段

  • 你会用typeof f*ck = ‘object’来判断是否是对象吗?你有何高见?显然如果f*ck是个数组的话,typeof也会返回true,应该用的是
object.prototype.tostring.call(f*ck) === 'object Object'; //return true
object.prototype.tostring.call(f*ck) === 'object Array'; //return false

  • 请你解释一下以下两个函数返回值的区别;
function foo1()
{
  return {
      bar: "hello"
  };
}

function foo2()
{
  return
  {
      bar: "hello"
  };
}

重点;JS 解析器会根据能否正常编译来决定是否自动填充分号: 第二个函数的return让js解析器认为可以结束了就自动填充了分号:
所以反回了undefined

function foo2()
{
  return;
  {
      bar: "hello"
  };
}

  • 你来说说下面程序的执行顺序?
(function() {
    console.log(1); 
    setTimeout(function(){console.log(2)}, 1000); 
    setTimeout(function(){console.log(3)}, 0); 
    console.log(4);
})();

settimeout()是会在执行队列后面的,所以一定是先执行完iife,再计时,也就是: 1 4 3 2


  • 如何实现以下的输出?
console.log(sum(2,3)  // 5
console.log(sum(2)(3))  //5

function sum (){
    var first = arguments[0];
    if(arguments.length === 2){
        return arguments[0]+arguments[1];
    }else{
     return function(secound){
        return first + secound;
        }
    }
};

  • 如何实现以下的输出?
var arr1 = "john".split(''); j o h n
var arr2 = arr1.reverse(); n h o j
var arr3 = "jones".split(''); j o n e s
arr2.push(arr3);
console.log("array 1: length=" + arr1.length + " last=" + arr1.slice(-1));
console.log("array 2: length=" + arr2.length + " last=" + arr2.slice(-1));

重点:数组的 reverse()是返回数组本身的,这里的arr1 ==== arr2 ;
输出:

array 1: length=5 last=j,o,n,e,s
array 2: length=5 last=j,o,n,e,s

  • 以下输出什么?
console.log(2 + 1 + '3'); / /‘33’
console.log('3' + 2 + 1); //'321'
console.log(+'1' +  '1' + '2'); //112 //

数字字符串之前存在数字中的正负号(+/-)时,会被转换成数字
你可以理解为:+’1’运算符与字符串靠近就相当于+1 === 1;

console.log( "A" - "B" + "2");
console.log( "A" - "B" + 2);

你可以理解为:’a’ - ‘a’ = NAN,但NAN+”就变成了 NAN2
typeof(NAN)其实是’number’,且NAN !== NAN;所以NAN+2应该还是NAN;


  • 小面的list很大,怎么才能防止溢出?
var list = readHugeList();

var nextListItem = function() {
    var item = list.pop();

    if (item) {
        // process the list item...
        nextListItem();
    }
};

改进:加一个计数器,因为计数器是放在执行队列后面的,只要是运行完了这个nextListItem,才会执行计数器的回调函数,所以肯定不
会溢出:运行完了就会出栈,再进来一个回调函数,理论上,是永远只有一层,不怕他多大嘿嘿嘿~

var list = readHugeList();

var nextListItem = function() {
    var item = list.pop();

    if (item) {
        // process the list item...
        setTimeout( nextListItem, 0);
    }
};

  • 以下代码输出的是什么?
console.log("0 || 1 = "+(0 || 1));
console.log("1 || 2 = "+(1 || 2));
console.log("0 && 1 = "+(0 && 1));
console.log("1 && 2 = "+(1 && 2));

1/1/0/2
逻辑与返回第一个是 false 的操作数 或者 最后一个是 true的操作数
逻辑或返回第一个是 true 的操作数 或者 最后一个是 false的操作数


  • 代码输出的是什么?
var a={},
    b={key:'b'},
    c={key:'c'};

a[b]=123;
a[c]=456;

console.log(a[b]);

答案是:456
其原因如下:当设置对象属性时,JavaScript将隐式地字符串化参数值。在这种情况下,由于b和c都是对象,因此它
们都将转换为“[object Object]”。因此,a [b]和a [c]都等价于[“[object Object]”],并且可以互换使用。因此,设置或参
考a [c]与设置或参考a [b]完全相同。


  • 以下代码输出什么?
var hero = {
    _name: 'John Doe',
    getSecretIdentity: function (){
        return this._name;
    }
};

var stoleSecretIdentity = hero.getSecretIdentity;

console.log(stoleSecretIdentity());          // undefined
console.log(hero.getSecretIdentity());       // John Doe

stoleSecretIdentity 的上下文是全局环境,所以第一个输出 undefined。若要输出 John Doe,则要通过 call 、apply 和 bind 等方式改变
stoleSecretIdentity 的this 指向(hero)。
第二个是调用对象的方法,输出 John Doe。


  • 给你一个 DOM 元素,创建一个能访问该元素所有子元素的函数,并且要将每个子元素传递给指定的回调函数。函数接受两个参数:DOM,指定的回调函数
    原文利用 深度优先搜索(Depth-First-Search) 给了一个实现:
function Traverse(p_element,p_callback) {
   p_callback(p_element);
   var list = p_element.children;
   for (var i = 0; i < list.length; i++) {
       Traverse(list[i],p_callback);  // recursive call
   }
}
  • 如何做到二维数组降维为一维数组
function reduceDimension(arr) {
    return Array.prototype.concat.apply([], arr);
} // 利用apply的第二个参数可以传一个数组,同时会依次调用concat的办法:

Array.prototype.concat.apply([], [[99, 98], [97, 96], [95]]) // [99, 98, 97, 96, 95]
### 回答1: 在Vue中,我们可以使用v-html指令来引入HTML代码片段。 v-html指令可以将一个属性值作为HTML代码动态地插入到元素中,并将其渲染为真实的HTML内容。这使得我们可以将包含HTML代码的变量或表达式作为内容插入到模板中。 要使用v-html指令,首先需要在Vue实例的data选项中定义一个属性来存储HTML代码片段。例如,我们可以在data中定义一个名为htmlCode的属性,并将需要的HTML代码字符串赋值给它。 接下来,在模板中的需要插入HTML的元素上使用v-html指令,并将要插入的HTML代码片段绑定到该指令的属性值上。例如,我们可以在需要插入HTML的div元素上使用v-html指令,并将htmlCode属性绑定到它上面。 最后,在Vue实例中,我们可以通过修改htmlCode属性的值来动态地改变插入的HTML代码片段。Vue会自动检测这个变化并更新渲染的HTML内容。 需要注意的是,由于v-html指令将属性值作为纯HTML内容渲染,我们需要确保这个属性值是可信的,以避免XSS攻击。因此,在使用v-html指令时,我们应该只使用由可信源生成的HTML片段。 总而言之,使用v-html指令可以方便地引入HTML代码片段,并将其作为真实的HTML内容进行渲染。这使得我们可以更灵活地动态地更新页面内容。 ### 回答2: 在Vue中,引入HTML代码片段可以通过v-html指令实现。v-html指令用于将数据作为HTML代码片段进行解析和渲染。 首先,在Vue组件中定义一个数据属性,用于存储要引入的HTML代码片段,例如: data() { return { htmlCode: '<p>这是一段引入的HTML代码。</p>' } } 然后,在模板中使用v-html指令引入该HTML代码片段,例如: <template> <div v-html="htmlCode"></div> </template> 上述代码中,通过v-html指令将htmlCode的值作为HTML代码片段进行解析和渲染。在这个例子中,页面会显示一段带有"这是一段引入的HTML代码。"的段落。 需要注意的是,使用v-html指令时,需要确保引入的HTML代码是可信任的,因为不经过HTML转义的代码容易引起安全问题。因此,在引入HTML代码片段前,最好对其进行安全校验,以防止恶意代码的注入。 最后,通过上述步骤,就可以在Vue中引入HTML代码片段,并使用v-html指令将其动态渲染到页面上。 ### 回答3: 在vue中引入HTML代码片段有多种方式: 1. v-html指令:使用v-html指令可以将一个HTML代码片段插入到指定的元素中。在模板中使用v-html指令,在绑定的表达式中返回HTML代码片段即可。例如: ```html <div v-html="htmlCode"></div> ``` 在Vue实例中,通过将htmlCode属性设置为HTML代码片段的字符串,即可将代码片段插入到该div元素中。 2. 过滤器:在Vue中,可以创建过滤器来处理HTML代码片段的引入。首先,要在Vue实例中注册一个全局过滤器: ```javascript Vue.filter('htmlFilter', function(value) { return value; }) ``` 在模板中使用该过滤器: ```html <div>{{ htmlCode | htmlFilter }}</div> ``` 同样,将htmlCode属性设置为HTML代码片段的字符串,即可通过过滤器将代码片段插入到该div元素中。 3. 组件化:将HTML代码片段封装为一个Vue组件,在需要使用的地方引入该组件即可。首先,创建一个组件,例如名为HTMLSnippet的组件: ```javascript Vue.component('HTMLSnippet', { template: '<div>{{ htmlCode }}</div>', props: ['htmlCode'] }) ``` 然后,在需要引入HTML代码片段的地方使用该组件: ```html <HTMLSnippet :htmlCode="htmlCode"></HTMLSnippet> ``` 将htmlCode属性设置为HTML代码片段的字符串,并将其作为HTMLSnippet组件的属性传递即可。 以上是三种常见的在Vue中引入HTML代码片段的方式,根据实际需求选择适合的方式即可。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值